始める無料で始める

1つのクエリで複数の集計を組み合わせる

直前の3つの演習では、ROLLUPCUBEGROUPING SETS のグルーピング演算子を見てきました。 この3つの中で、最も柔軟なのは GROUPING SETS で、必要な集計レベルを正確に指定できます。 GROUPING SETS は(ROLLUP と違って)階層を前提とせず、(CUBE と違って)列数が多くなっても扱いやすさを保てます。

この演習では、データを使って次の仮説を検証します。

  1. 2019年11月に研修を導入して以降、1か月あたりのインシデント数が減っている。
  2. 平日では火曜日に他の曜日よりインシデントが多い。
  3. 週末は平日よりインシデントが多い。

この演習はコースの一部です

SQL Serverで学ぶ時系列分析

コースを見る

演習の手順

上の仮説に基づいてグルーピングセットを設定してください。 総計(グランドトータル)に加えて、次のグルーピングセットを表示します。

  • 暦年と月の組み合わせによるセット
  • 曜日によるセット
  • 週末かどうかによるセット

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

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;
コードを編集して実行