Ранжирование спортсменов из разных стран
В предыдущем упражнении вы использовали RANK для ранжирования спортсменов одной группы. Однако в реальных данных групп, как правило, бывает несколько. Если не разбивать данные на разделы, значения одной группы будут влиять на ранги другой.
Кроме того, RANK пропускает числа при одинаковых значениях, хотя на практике ранги обычно присваиваются без пропусков. Если две страны делят второе место, большинство людей считают следующую страну третьей, а не четвёртой.
Это упражнение является частью курса
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;