เปรียบเทียบ ROW_NUMBER(), RANK() และ DENSE_RANK()
ในกลุ่มฟังก์ชัน window สำหรับการจัดอันดับ ROW_NUMBER() เป็นฟังก์ชันที่ใช้บ่อยที่สุด รองลงมาคือ RANK() และ DENSE_RANK() ฟังก์ชันจัดอันดับทั้งสาม (รวมถึง NTILE()) ให้วิธีการจัดลำดับข้อมูลใน SQL Server ที่แตกต่างกันออกไป
ในแบบฝึกหัดนี้ เราต้องการทราบว่าเหตุการณ์ประเภทที่ 3 ปรากฏในชุดข้อมูลบ่อยแค่ไหน โดยจะจัดอันดับจำนวนเหตุการณ์ในลำดับจากมากไปน้อย เพื่อให้วันที่มีจำนวนเหตุการณ์สูงสุดได้ row number, rank และ dense rank เป็น 1 และลดหลั่นลงไปตามลำดับ เพื่อให้ง่ายต่อการติดตาม เราจะแสดงเฉพาะวันที่มีเหตุการณ์อย่างน้อย 8 ครั้งเท่านั้น
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาใน SQL Server
คำแนะนำการฝึกหัด
- เติมฟังก์ชัน window ให้ตรงกับชื่อ alias ของแต่ละคอลัมน์ โดยใช้
ROW_NUMBER(),RANK()และDENSE_RANK()อย่างละหนึ่งครั้ง - เติมคำสั่ง
OVERโดยเรียงลำดับตามir.NumberOfIncidentsแบบจากมากไปน้อย
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
SELECT
ir.IncidentDate,
ir.NumberOfIncidents,
-- Fill in each window function and ordering
-- Note that all of these are in descending order!
___() OVER (___ ___ ir.NumberOfIncidents ___) AS rownum,
___() OVER (___ ___ ir.NumberOfIncidents ___) AS rk,
___() OVER (___ ___ ir.NumberOfIncidents ___) AS dr
FROM dbo.IncidentRollup ir
WHERE
ir.IncidentTypeID = 3
AND ir.NumberOfIncidents >= 8
ORDER BY
ir.NumberOfIncidents DESC;