複数の国のアスリートに順位を付ける
前の演習では、RANK を使って1つのアスリート集団に順位を割り当てました。ですが実データでは、データ内に複数のグループが存在することがよくあります。パーティション分割をしないと、あるグループの値が他のグループの順位に影響してしまいます。
また、RANK は同点の場合に番号を飛ばしますが、一般的な順位付けとしては番号を飛ばさないほうが自然です。2つの国が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;