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

เปรียบเทียบ 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;
แก้ไขและรันโค้ด