多个条件的 RANK() OVER (ORDER BY)

RANK() OVER (ORDER BY) for multiple criterias

我有两个 table,“玩家”和“结果”:

目标是使用 SQL-query 获得以下 table(table 对每个玩家排名最高的结果,并将结果从最高到最低排序。如果有两个相等的结果,然后名字按字母顺序排在第一位的玩家排在最前面。

我尝试了下面的查询,结果得到以下 table:

SELECT RANK() OVER(ORDER BY MAX(result) DESC), name, MAX(result)
FROM Results
JOIN Players
WHERE Results.player_id = Players.id
GROUP BY name

我不知道如何包含第二个标准,即根据球员姓名字母顺序对得分相同的球员进行排名。

你可以使用window函数rank()得到每组的最大结果:

select name , max(result) result, rank() over (order by max(result) desc) rn
from Results r
join Players p on r.player_id = p.id
group by name
order by max(result) desc, name