开始使用免费开始使用

计算带筛选条件的聚合

如果想在给定筛选条件下统计某类事件的发生次数,您可以利用 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.IncidentDateit.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;
编辑并运行代码