開始使用免費開始

為多個國家的運動員排名

在上一個練習中,你使用 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;
編輯並執行程式碼