Hãy thử điều này:
SELECT gamers.*
FROM gamers
INNER JOIN
(SELECT
max(score) as maxscore,
gameid from gamers
GROUP BY gameid) AS b
ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score) ;
ORDER BY score DESC, gameid;
Điều này sẽ xuất ra:
+---------+--------+-------+
| gamerid | gameid | score |
+---------+--------+-------+
| 4 | 1 | 90 |
| 5 | 2 | 40 |
| 8 | 3 | 30 |
+---------+--------+-------+
3 rows in set (0.00 sec)
Tùy chọn khác mà bạn có thể làm là tạo một bảng tạm thời hoặc một dạng xem (nếu bạn không thích truy vấn phụ).
create temporary table games_score (
SELECT max(score) as maxscore, gameid FROM gamers GROUP BY gameid
);
Sau đó:
SELECT gamers.*
FROM gamers
INNER JOIN games_score AS b ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score)
ORDER BY score DESC, gameid;
HOẶC một lượt xem:
create or replace view games_score AS
SELECT max(score) as maxscore, gameid FROM gamers GROUP BY gameid;
Sau đó:
SELECT gamers.*
FROM gamers
INNER JOIN games_score AS b ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score)
ORDER BY score DESC, gameid;