Moving maximum ของเหรียญรางวัลนักกีฬาจีน
Frame ช่วยให้สามารถ "มองไปข้างหน้าหรือย้อนกลับ" ได้โดยไม่ต้องใช้ฟังก์ชัน relative fetching อย่าง LAG และ LEAD เพื่อดึงค่าจากแถวก่อนหน้ามาไว้ในแถวปัจจุบันก่อน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
PostgreSQL Summary Stats and Window Functions
คำแนะนำการฝึกหัด
- คืนค่าชื่อนักกีฬา จำนวนเหรียญที่ได้รับ และจำนวนเหรียญสูงสุด โดยเปรียบเทียบเฉพาะนักกีฬา 2 คนก่อนหน้าและนักกีฬาปัจจุบัน เรียงลำดับตามชื่อนักกีฬาจากน้อยไปมากตามตัวอักษร
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
WITH Chinese_Medals AS (
SELECT
Athlete, COUNT(*) AS Medals
FROM Summer_Medals
WHERE
Country = 'CHN' AND Medal = 'Gold'
AND Year >= 2000
GROUP BY Athlete)
SELECT
-- Select the athletes and the medals they've earned
___,
___,
-- Get the max of the last two and current rows' medals
___ OVER (ORDER BY ___ ASC
ROWS BETWEEN ___
AND ___) AS Max_Medals
FROM Chinese_Medals
ORDER BY Athlete ASC;