Kombinera flera aggregeringar i en fråga
I de tre senaste övningarna gick vi igenom grupperingsoperatorerna ROLLUP, CUBE och GROUPING SETS. Av dessa tre är GROUPING SETS den mest anpassningsbara – den låter dig definiera exakt de aggregeringsnivåer du vill ha. Till skillnad från ROLLUP förutsätter GROUPING SETS ingen hierarki, och till skillnad från CUBE förblir den hanterbar även med ett större antal kolumner.
I den här övningen vill vi testa tre antaganden mot våra data:
- Vi har sett färre incidenter per månad sedan vi införde utbildning i november 2019.
- Fler incidenter inträffar på tisdagar än på andra vardagar.
- Fler incidenter inträffar på helger än på vardagar.
Den här övningen är en del av kursen
Tidsserieanalys i SQL Server
Övningsinstruktioner
Fyll i grupperingsmängderna utifrån antagandena ovan. Utöver en totalsumma vill vi se följande grupperingsmängder:
- En mängd grupperad efter kalenderår och månad
- En mängd grupperad efter veckodag
- En mängd grupperad efter om datumet infaller på en helg eller inte
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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;