开始使用免费开始使用

在一条查询中组合多种聚合

在前面三个练习中,您已经学习了分组运算符 ROLLUPCUBEGROUPING SETS。这三者中,GROUPING SETS 的可定制度最高,能够精确构建您需要的聚合层级。与 ROLLUP 不同,GROUPING SETS 不对层级结构做任何假设;与 CUBE 不同,即使列较多时也更易于管理。

在本练习中,我们希望用数据检验以下猜想:

  1. 自 2019 年 11 月引入培训以来,每月事件数更少了。
  2. 周二发生的事件比其他工作日更多。
  3. 周末发生的事件比工作日更多。

本练习是课程的一部分

SQL Server 中的时间序列分析

查看课程

练习说明

请根据上面的猜想补全 grouping sets。除了总计(grand total)以外,我们希望看到以下 grouping set:

  • 按日历年和月份分组的一组
  • 按星期几分组的一组
  • 按是否为周末分组的一组

交互式实操练习

通过完成这段示例代码来试试这个练习。

SELECT
	c.CalendarYear,
	c.CalendarMonth,
	c.DayOfWeek,
	c.IsWeekend,
	SUM(ir.NumberOfIncidents) AS NumberOfIncidents
FROM dbo.IncidentRollup ir
	INNER JOIN dbo.Calendar c
		ON ir.IncidentDate = c.Date
GROUP BY GROUPING SETS
(
    -- Each non-aggregated column from above should appear once
  	-- Calendar year and month
	(___, ___),
  	-- Day of week
	(___),
  	-- Is weekend or not
	(___),
    -- This remains empty; it gives us the grand total
	()
)
ORDER BY
	c.CalendarYear,
	c.CalendarMonth,
	c.DayOfWeek,
	c.IsWeekend;
编辑并运行代码