Začněte nyníZačněte zdarma

Kombinace více agregací v jednom dotazu

V předchozích třech cvičeních jsme se postupně seznámili s operátory ROLLUP, CUBE a GROUPING SETS. Ze všech tří je GROUPING SETS nejflexibilnější – umožňuje přesně definovat úrovně agregace, které potřebuješ. Na rozdíl od ROLLUP nepředpokládá žádnou hierarchii a na rozdíl od CUBE zůstává přehledný i při větším počtu sloupců.

V tomto cvičení chceme ověřit několik hypotéz o našich datech:

  1. Od zavedení školení v listopadu 2019 dochází každý měsíc k méně incidentům.
  2. V úterý dochází k více incidentům než v ostatní pracovní dny.
  3. O víkendech dochází k více incidentům než v pracovní dny.

Toto cvičení je součástí kurzu

Time Series Analysis in SQL Server

Zobrazit kurz

Pokyny k cvičení

Doplň grouping sets podle výše uvedených hypotéz. Kromě celkového součtu chceme vidět následující grouping sets:

  • Jeden podle kalendářního roku a měsíce
  • Jeden podle dne v týdnu
  • Jeden podle toho, zda jde o víkend, nebo ne

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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;
Upravit a spustit kód