ПочатиПочніть безкоштовно

Поєднайте кілька агрегацій в одному запиті

У трьох попередніх вправах ми розглянули оператори групування ROLLUP, CUBE та GROUPING SETS. Із цієї трійки GROUPING SETS є найгнучкішим: він дає змогу побудувати саме ті рівні агрегації, які вам потрібні. GROUPING SETS не робить припущень про ієрархію (на відміну від ROLLUP) і лишається керованим навіть за наявності більшої кількості стовпців (на відміну від 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;
Редагувати та запускати код