查找表中每个键的前2条记录



我有一个玩家在游戏中的得分结果列表,我需要获得每场游戏的前两名终结者。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

最新更新