始める無料で始める

複数の国のアスリートに順位を付ける

前の演習では、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;
コードを編集して実行