题目链接:点击打开链接
题目大意:略。
解题思路:解决方案(1) 最后只需要再使用一次 FROM 子句和 GROUP BY 取出每个组的第一条数据即可。
AC 代码
-- 解决方案(1)
SELECT group_id, player_id
FROM (
    SELECT group_id, player_id, SUM(score) AS score
    FROM (
        -- 每个用户总的 first_score
        SELECT Players.group_id, Players.player_id, SUM(Matches.first_score) AS score
        FROM Players JOIN Matches ON Players.player_id = Matches.first_player
        GROUP BY Players.player_id
        UNION ALL
        -- 每个用户总的 second_score
        SELECT Players.group_id, Players.player_id, SUM(Matches.second_score) AS score
        FROM Players JOIN Matches ON Players.player_id = Matches.second_player
        GROUP BY Players.player_id
    ) s
    GROUP BY player_id
    ORDER BY score DESC, player_id
) result
GROUP BY group_id
-- 解决方案(2)
WITH t1 AS(SELECT player, SUM(score) sumn
FROM (
SELECT first_player player, first_score score FROM Matches
UNION ALL
SELECT second_player, second_score FROM Matches
) t
GROUP BY player),
t2 AS(SELECT group_id, player player_id, ROW_NUMBER() OVER(PARTITION BY group_id ORDER BY sumn DESC, player) rw
FROM Players p JOIN t1 ON p.player_id = t1.player)
SELECT group_id, player_id 
FROM t2
WHERE rw = 1









