Mysql GROUP BY 中的 ORDER LIMIT

Mysql LIMIT in ORDER in GROUP BY

我有这个游戏记录table:

+---------+------+-------+
| game_id | user | score |
+---------+------+-------+
| 1       | Nick | 10    |
| 1       | Bob  | 15    |
| 2       | Nick | 15    |
| 2       | Bob  | 10    |
| 3       | Nick | 20    |
+---------+------+-------+

在每场比赛中,获胜者只有一位用户,即得分最高的用户。 我正在尝试 select 每场比赛的获胜者,例如:

+---------+--------+
| game_id | winner |
+---------+--------+
| 1       | Bob    |
| 2       | Nick   |
| 3       | Nick   |
+---------+--------+

但是我所有的努力都没有结果。 谁能帮帮我?

您可以使用以下查询:

SELECT g1.game_id, g1.user AS winner
FROM games AS g1
INNER JOIN (
   SELECT game_id, MAX(score) AS maxScore
   FROM games
   GROUP BY game_id 
) AS g2 ON g1.game_id = g2.game_id AND g1.score = g2.maxScore

Demo here

一种方法是首先创建一个临时的 table,其中包含游戏 ID 以及该游戏 ID 的最高得分。这就是我下面的答案中的内部查询所做的。然后可以将其连接回您的原始 table 以获得与该游戏 ID 和获胜分数相关联的用户。

SELECT t.game_id, t.user AS winner
FROM gamelog t1 INNER JOIN
(
    SELECT g.game_id, MAX(g.score) AS maxscore
    FROM gamelog g
    GROUP BY g.game_id
) t2
ON t1.game_id = t2.game_id AND t1.score = t2.maxscore