นักกีฬาที่ได้รับเหรียญมากที่สุดในแต่ละภูมิภาค
เป้าหมายของแบบฝึกหัดนี้คือการแสดงนักกีฬาที่ได้รับเหรียญมากที่สุด ในแต่ละภูมิภาค ในการสร้างรายงานนี้ ต้องใช้ window function ROW_NUMBER() ซึ่งกำหนดหมายเลขให้แต่ละแถวเป็นจำนวนเต็มที่เพิ่มขึ้นทีละหนึ่ง โดยแถวแรกคือ 1 แถวที่สองคือ 2 และต่อไปเรื่อย ๆ
ไวยากรณ์ของ window function นี้คือ ROW_NUMBER() OVER (PARTITION BY field ORDER BY field) สังเกตว่าไม่มี argument ภายในฟังก์ชันเริ่มต้น
เมื่อตั้งค่าถูกต้อง row_num = 1 จะหมายถึงนักกีฬาที่ได้รับเหรียญมากที่สุดในภูมิภาคนั้น หากนักกีฬาหลายคนมียอดรวมเท่ากัน คนใดคนหนึ่งในกลุ่มที่เสมอกันอาจปรากฏเป็นผลลัพธ์อันดับสูงสุด ทั้งนี้ ไม่สามารถใช้การคำนวณแบบ window ภายใน HAVING หรือ WHERE ได้ จึงต้องใช้ subquery ในการกรองข้อมูล
สามารถอ้างอิง E:R Diagram ได้ตามต้องการ และจะใช้ summer_games_clean เพื่อหลีกเลี่ยงการจัดการค่า null
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การรายงานผลด้วย SQL
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
SELECT
-- Query region, athlete_name, and total gold medals
____,
____ AS athlete_name,
____ AS total_golds,
-- Assign a regional rank to each athlete
____ AS row_num
FROM ____ AS s
JOIN ____ AS a
ON ____
JOIN ____ AS c
ON ____
GROUP BY ____;