Формирование сводки с помощью 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;