Xếp hạng vận động viên từ nhiều quốc gia
Ở bài trước, bạn đã dùng RANK để gán thứ hạng cho một nhóm vận động viên. Tuy nhiên, trong dữ liệu thực tế, bạn thường sẽ gặp nhiều nhóm khác nhau. Nếu không phân vùng dữ liệu, giá trị của nhóm này sẽ ảnh hưởng đến thứ hạng của nhóm khác.
Ngoài ra, trong khi RANK bỏ qua số thứ tự khi có các giá trị bằng nhau, cách gán hạng tự nhiên hơn là không bỏ qua số. Nếu hai quốc gia đồng hạng nhì, thì quốc gia tiếp theo thường được xem là hạng ba.
Bài tập này là một phần của khóa học
Thống kê tóm tắt và Window Functions trong PostgreSQL
Hướng dẫn bài tập
- Xếp hạng các vận động viên của từng quốc gia theo số huy chương họ giành được — số huy chương càng cao thì hạng càng cao — và không bỏ qua số thứ tự khi có các giá trị bằng nhau.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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;