НачатьНачать бесплатно

Несколько агрегирований в одном запросе

В трёх предыдущих упражнениях мы рассмотрели операторы группировки ROLLUP, CUBE и GROUPING SETS. Из них GROUPING SETS — наиболее гибкий: он позволяет задать именно те уровни агрегирования, которые вам нужны. В отличие от ROLLUP, GROUPING SETS не предполагает иерархии, а в отличие от CUBE — остаётся удобным в работе даже при большом числе столбцов.

В этом упражнении мы проверим несколько гипотез на основе наших данных:

  1. После введения обучения в ноябре 2019 года количество инцидентов в месяц сократилось.
  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;
Редактировать и запускать код