比較 ROW_NUMBER()、RANK() 與 DENSE_RANK()
在排名類的視窗函式中,ROW_NUMBER() 最常見,其次是 RANK() 和 DENSE_RANK()。這些排名函式(以及 NTILE())在 SQL Server 中提供了不同的紀錄排序方式。
在本練習中,你要找出資料集中事件類型 3 的出現頻率。我們會把事件次數依遞減排序,也就是事件數量最高的日期,其列號、名次與緊密名次都為 1,依此類推。為了更好觀察,我們只納入至少有 8 起事件的日期。
本練習屬於課程
SQL Server 的時間序列分析
練習說明
- 根據欄位別名填入各視窗函式。你應各使用一次
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;