对比 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;