開始使用免費開始

在單一查詢中結合多個彙總

在前面三個練習中,我們依序介紹了 ROLLUPCUBEGROUPING SETS 這三種分組運算子。三者之中,GROUPING SETS 的客製化程度最高,能讓你精準建立所需的彙總層級。GROUPING SETS 不會對階層關係做任何假設(不像 ROLLUP),而且在欄位數量較多時仍可維持可控的複雜度(不像 CUBE)。

在這個練習裡,我們想用資料來檢驗幾項推測:

  1. 自從 2019 年 11 月導入訓練後,每月事件數變少。
  2. 事件在星期二發生的次數比其他平日多。
  3. 事件在週末發生的次數比平日多。

本練習屬於課程

SQL Server 的時間序列分析

檢視課程

練習說明

請依上述推測填寫 grouping sets。我們想在總計之外,看到以下這些 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;
編輯並執行程式碼