开始使用免费开始使用

为多个国家的运动员排名

在上一个练习中,您使用 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;
编辑并运行代码