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:
- Od zavedení školení v listopadu 2019 dochází každý měsíc k méně incidentům.
- V úterý dochází k více incidentům než v ostatní pracovní dny.
- 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
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;