【问题标题】:Selecting correct database row when grouping results分组结果时选择正确的数据库行
【发布时间】: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。

【问题讨论】:

标签: mysql group-by


【解决方案1】:

您也可以通过选择 max 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

【讨论】:

  • 我不需要最新的日期,我需要得分最高的那一行的日期
  • @Jop 你试过我的查询吗?它将导致得分最高的日期而不是最新日期。
  • 我试过了,巧合的是,它显示了第一行的正确日期,但其他行却没有......
猜你喜欢
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
相关资源
最近更新 更多