為多個國家的運動員排名
在上一個練習中,你使用 RANK 為一組運動員指派名次。不過在真實世界的資料中,你常常會在同一份資料裡看到多個群組。如果不先對資料做分割(partition),其中一個群組的數值會影響到其他群組的排名。
此外,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;