เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การจัดอันดับนักกีฬาจากหลายประเทศ

ในแบบฝึกหัดที่แล้ว เราใช้ RANK เพื่อจัดอันดับให้กับนักกีฬากลุ่มหนึ่ง แต่ในข้อมูลจริง มักมีหลายกลุ่มอยู่ในชุดข้อมูลเดียวกัน หากไม่แบ่ง partition ข้อมูล ค่าของกลุ่มหนึ่งจะส่งผลต่อการจัดอันดับของกลุ่มอื่น

นอกจากนี้ RANK จะข้ามตัวเลขเมื่อมีค่าที่เท่ากัน แต่วิธีที่เป็นธรรมชาติที่สุดในการจัดอันดับคือการไม่ข้ามตัวเลข ถ้าสองประเทศได้อันดับสองร่วมกัน ประเทศถัดไปควรได้อันดับสาม ไม่ใช่อันดับสี่

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

PostgreSQL Summary Stats and Window Functions

ดูคอร์ส

คำแนะนำการฝึกหัด

  • จัดอันดับนักกีฬาของแต่ละประเทศตามจำนวนเหรียญที่ได้รับ โดยยิ่งได้เหรียญมาก ยิ่งได้อันดับสูง และไม่ข้ามตัวเลขในกรณีที่มีค่าเท่ากัน

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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;
แก้ไขและรันโค้ด