在MySQL 5.7中获取最大分数和最大分数行中的字段

在MySQL 5.7中获取最大分数和最大分数行中的字段,mysql,sql,Mysql,Sql,我想得到每个人的最高分数,每一行都应该包括id和日期等所有字段 | id | uid | score | date | ———————————————————————————————— | 1 | aaa | 10 | 2017.7.7| | 2 | bbb | 5 | 2017.7.7| | 3 | aaa | 15 | 2017.7.7| | 4 | bbb | 20 | 2017.7.8| 按uid顺序按分数描述

我想得到每个人的最高分数,每一行都应该包括id和日期等所有字段

| id | uid  | score   | date    |
————————————————————————————————
| 1  | aaa  | 10      | 2017.7.7|

| 2  | bbb  | 5       | 2017.7.7|

| 3  | aaa  | 15      | 2017.7.7|

| 4  | bbb  | 20      | 2017.7.8|
按uid顺序按分数描述从数据组中选择maxscore作为分数、id、日期、uid


在v5.7之前,我可以使用这个sql在MySQL中得到我想要的东西,但是在MySQL 5.7之后,有一个sql模式,只有完整的组。所以我不能像以前那样得到结果。我看到有一些答案告诉我禁用该模式。但是我想知道是否有sql可以做到这一点,并且我没有禁用该模式。

我建议您使用

| id | uid | score | date    |
—————————————————————————————
| 4  | bbb | 20    | 2017.7.8|

| 3  | aaa | 15    | 2017.7.7|

您可以通过以下查询禁用该模式:

SET sql_mode = 'ONLY_FULL_GROUP_BY';
此外,您的查询将只显示uid的最大分数,而不显示它的相关id和日期

| id | uid  | score   | date    |
————————————————————————————————
| 1  | aaa  | 10      | 2017.7.7|

| 2  | bbb  | 5       | 2017.7.7|

| 3  | aaa  | 15      | 2017.7.7|

| 4  | bbb  | 20      | 2017.7.8|

另一种重写相同查询的方法是使用左连接,而不使用聚合函数

Select max(score) as score, id, date, uid 
from data 
where (uid,score) in (select uid,max(score) 
                      from data
                      group by uid
                     )
group by uid 
order by score desc
注意,它可能会为单个uid返回多行,如果有具有相同最高分数的行,您可能需要一个CASE语句和另一个属性来决定应选择哪一行来处理这种情况


它是否按预期工作?如果以下任何答案已解决/帮助您解决问题,请将其标记为答案和/或对答案进行投票。
select a.*
from data a
left join data b on a.uid = b.uid
and a.score < b.score
where b.uid is null