gpt4 book ai didi

mysql - ORDER BY 后 GROUP BY 不起作用

转载 作者:行者123 更新时间:2023-12-05 01:26:24 26 4
gpt4 key购买 nike

SELECT * 
FROM (SELECT id, user, MAX(score) FROM table_1 GROUP BY user) AS sub
ORDER BY 'sub.score' ASC;

此 SQL 查询应仅从表中选择每个用户的分数,并且为了准确性,选择最高的分数。

表结构是这样的:
+-----------------------+
| id | score | username |
+-----------------------+
| 1 | 15 | mike |
| 2 | 23 | tom |
| 3 | 16 | mike |
| 4 | 22 | jack |

etc..

结果应该是这样的:
3 mike 16
2 tom 23
4 jack 22

然后重新排序:
3 mike 16
4 jack 22
2 tom 23

但是查询不会按分数重新排序子查询。怎么做?

最佳答案

让我们一步一步地看看你在做什么:

SELECT id, user, MAX(score) FROM table_1 GROUP BY user

在这里,您按用户名分组,因此每个用户名都会得到一个结果行。在此结果行中,您选择用户名、为该用户名找到的最大分数('mike' 为 16)和为该用户名找到的 ID 之一('mike' 可以是 1 或 3, DBMS 可以自由选择一个)。这可能不是您想要的。
SELECT * FROM (...) AS sub  ORDER BY 'sub.score' ASC;

'sub.score' 是一个字符串(单引号)。您想按照子查询中的最大分数进行排序。所以先给 max(score)一个名字,例如 max(score) as max_score ,然后访问: ORDER BY sub.max_score ASC .

无论如何,如果你想要一个用户名得分最高的记录(以便获得相应的ID),你可以寻找不存在具有相同用户名和更高得分的记录的记录。排序很容易:由于没有聚合,您只需按分数排序:
select * from table_1 t1 where not exists 
(select * from table_1 higher where higher.name = t1.name and higher.score > t1.score)
order by score;

关于mysql - ORDER BY 后 GROUP BY 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40336850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com