我想要为特定游戏选择每个用户的最佳分数。
我的当前查询选择了skill_game的id为1的结果的分数、date_saved和用户名。
SELECT MAX(score) as score, date_saved, users.username FROM results INNER JOIN users_results ON results.id = users_results.result_id INNER JOIN users ON users_results.user_id = users.id WHERE skill_game_id = 1 GROUP BY user_id ORDER BY score DESC
结果如下:
| score | username | date_saved | --------------------------------- | 73 | Mark | 2021-09-06 | | 51 | John | 2018-08-16 | | 46 | Ryan | 2020-02-20 | | 43 | Chris | 2019-08-27 | | 40 | Steven | 2020-07-04 |
目前,date_saved并不总是正确的,因为Mark的73分结果实际上是在2021-11-03保存的。以下是Mark的结果:
| score | username | date_saved | --------------------------------- | 73 | Mark | 2021-11-03 | | 35 | Mark | 2021-10-29 | | 24 | Mark | 2021-09-06 |
GROUP BY语句选择了组中的第一行,MAX(score)选择了组中的最高分数。我想要能够选择最高分数并选择相应的日期,但我不确定如何在MySQL中实现这一点。
P粉9646829042024-04-06 00:37:46
你也可以通过选择最大的date_saved来完成
SELECT MAX(score) as score, MAX(date_saved), users.username FROM results INNER JOIN users_results ON results.id = users_results.result_id INNER JOIN users ON users_results.user_id = users.id WHERE skill_game_id = 1 GROUP BY user_id ORDER BY score DESC