我有一个玩家在游戏中的得分结果列表,我需要获得每场游戏的前两名终结者。LIMIT 2适用于整个结果集,但我需要将其限制为每个游戏2个(如果只有一个,则为1个)。
正在查询的表:
player_id100300200100200
使用RANK()
我们可以尝试:
WITH cte AS (
SELECT *, RANK() OVER (PARTITION BY game_id ORDER BY score DESC) rnk
FROM yourTable
)
SELECT game_id, player_id, score
FROM cte
WHERE rnk <= 2
ORDER BY game_id, score DESC;
请注意,如果存在平局的可能性,那么您可能希望使用DENSE_RANK
而不是RANK
。如果关系不是一个问题,那么您也可以使用ROW_NUMBER
而不是RANK
。