计算带筛选条件的聚合
如果想在给定筛选条件下统计某类事件的发生次数,您可以利用 SUM()、MIN()、MAX() 等聚合函数,以及 CASE 表达式。例如,SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) 会返回事件类型 1 对应的事件数量。若为每个事件类型各写一个 SUM() 语句,您就按事件类型 ID 对数据集完成了透视。
在本情境中,管理层希望我们按事件类型告知:「大事件」日与「小事件」日各有多少天。管理层定义:同一事件类型在同一天发生次数超过 5 次,为大事件日;发生 1 到 5 次,为小事件日。
本练习是课程的一部分
SQL Server 中的时间序列分析
练习说明
- 补全一个
CASE表达式,以便配合SUM()计算大事件日与小事件日的天数。 - 在该
CASE表达式中,若满足相应的筛选条件则返回 1,否则返回 0。 - 引用列时务必带上表别名,例如
ir.IncidentDate或it.IncidentType!
交互式实操练习
通过完成这段示例代码来试试这个练习。
SELECT
it.IncidentType,
-- Fill in the appropriate expression
SUM(___ WHEN ir.NumberOfIncidents > 5 THEN ___ ELSE ___ ___) AS NumberOfBigIncidentDays,
-- Number of incidents will always be at least 1, so
-- no need to check the minimum value, just that it's
-- less than or equal to 5
SUM(___ WHEN ir.NumberOfIncidents <= 5 THEN ___ ELSE ___ ___) AS NumberOfSmallIncidentDays
FROM dbo.IncidentRollup ir
INNER JOIN dbo.IncidentType it
ON ir.IncidentTypeID = it.IncidentTypeID
WHERE
ir.IncidentDate BETWEEN '2019-08-01' AND '2019-10-31'
GROUP BY
it.IncidentType;