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

Формирование сводки с помощью ROLLUP

Оператор ROLLUP наиболее эффективен, когда неизмеримые атрибуты образуют иерархию. В противном случае могут появиться уровни агрегации, лишённые очевидного смысла.

В данном сценарии требуется подсчитать общее количество инцидентов безопасности в таблице IncidentRollup. Руководство хочет видеть данные, агрегированные по комбинации календарного года, квартала и месяца. Помимо этого, нужны отдельные строки агрегации для каждой пары «год + квартал», а также отдельные строки для каждого календарного года. Наконец, необходима итоговая строка с общим результатом. Всё это можно реализовать в рамках одной операции.

Это упражнение является частью курса

Анализ временных рядов в SQL Server

Посмотреть курс

Инструкции к упражнению

  • Завершите определение NumberOfIncidents, суммировав количество инцидентов по каждому диапазону.
  • Заполните секцию GROUP BY, добавив оператор WITH ROLLUP.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

SELECT
	c.CalendarYear,
	c.CalendarQuarterName,
	c.CalendarMonth,
    -- Include the sum of incidents by day over each range
	___(ir.___) AS NumberOfIncidents
FROM dbo.IncidentRollup ir
	INNER JOIN dbo.Calendar c
		ON ir.IncidentDate = c.Date
WHERE
	ir.IncidentTypeID = 2
GROUP BY
	-- GROUP BY needs to include all non-aggregated columns
	c.___,
	c.___,
	c.___
-- Fill in your grouping operator
WITH ___
ORDER BY
	c.CalendarYear,
	c.CalendarQuarterName,
	c.CalendarMonth;
Редактировать и запускать код