Combina varias agregaciones en una sola consulta
En los tres ejercicios anteriores, vimos los operadores de agrupación ROLLUP, CUBE y GROUPING SETS. De estos tres, GROUPING SETS es el más personalizable, ya que te permite definir exactamente los niveles de agregación que quieres. GROUPING SETS no presupone jerarquías (a diferencia de ROLLUP) y se mantiene manejable con un buen número de columnas (a diferencia de CUBE).
En este ejercicio, queremos poner a prueba varias hipótesis con nuestros datos:
- Hemos visto menos incidentes por mes desde que introdujimos la formación en noviembre de 2019.
- Ocurren más incidentes los martes que el resto de los días laborables.
- Ocurren más incidentes los fines de semana que entre semana.
Este ejercicio forma parte del curso
Análisis de series temporales en SQL Server
Instrucciones del ejercicio
Completa los conjuntos de agrupación según las hipótesis anteriores. Queremos ver los siguientes conjuntos de agrupación además del total general:
- Un conjunto por año y mes del calendario
- Un conjunto por día de la semana
- Un conjunto por si la fecha es fin de semana o no
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
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;