为多个国家的运动员排名
在上一个练习中,您使用 RANK 为一组运动员分配名次。但在真实数据中,数据里通常会有很多组。如果不对数据进行分区,一个组的取值会影响到其他组的排名。
另外,虽然 RANK 在遇到相同值时会跳过名次,但更自然的排名方式是不跳号。如果两个国家并列第 2 名,接下来的国家在大多数人的理解中就是第 3 名。
本练习是课程的一部分
PostgreSQL 汇总统计与窗口函数
练习说明
- 按各国运动员获得的奖牌数为其排名——奖牌数越多,名次越高——并且在出现相同值时不要跳过名次。
交互式实操练习
通过完成这段示例代码来试试这个练习。
WITH Athlete_Medals AS (
SELECT
Country, Athlete, COUNT(*) AS Medals
FROM Summer_Medals
WHERE
Country IN ('JPN', 'KOR')
AND Year >= 2000
GROUP BY Country, Athlete
HAVING COUNT(*) > 1)
SELECT
Country,
-- Rank athletes in each country by the medals they've won
___,
___ OVER (PARTITION BY ___
ORDER BY Medals DESC) AS Rank_N
FROM Athlete_Medals
ORDER BY Country ASC, RANK_N ASC;