多个条件的 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
我有两个 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