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
一种方法是首先创建一个临时的 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
我有这个游戏记录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
一种方法是首先创建一个临时的 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