【发布时间】:2023-03-15 00:06:01
【问题描述】:
我想为特定游戏选择每个用户的最佳分数。
我当前的查询选择 id 为 1 的 Skill_game 结果的 score、date_saved 和 username。
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。
【问题讨论】:
-
'GROUP BY 用户名语句选择第一行' - 这应该被视为巧合 - 实际日期不确定。请参阅dev.mysql.com/doc/refman/5.6/en/group-by-handling.html 了解更多原因,您应该更改查询以测试相关子查询中用户的最高分数。
-
MySql 是唯一一个允许其有效的 RDBMS afaik mysql_only_full_group_by