Calcular agregaciones filtradas
Si queremos contar el número de ocurrencias de un evento dado algún criterio de filtro, podemos aprovechar funciones de agregación como SUM(), MIN() y MAX(), así como expresiones CASE. Por ejemplo, SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) devolverá el recuento de incidentes asociados al tipo de incidente 1. Si incluyes una sentencia SUM() para cada tipo de incidente, habrás pivotado el conjunto de datos por el ID de tipo de incidente.
En este escenario, dirección quiere que le indiquemos, por tipo de incidente, cuántos días de "incidentes grandes" hemos tenido frente a días de "incidentes pequeños". Dirección define un día de incidentes grandes como aquel con más de 5 ocurrencias del mismo tipo de incidente en el mismo día, y un día de incidentes pequeños como aquel con entre 1 y 5.
Este ejercicio forma parte del curso
Análisis de series temporales en SQL Server
Instrucciones del ejercicio
- Completa una expresión
CASEque nos permita usar la funciónSUM()para calcular el número de días con incidentes grandes y con incidentes pequeños. - En la expresión
CASE, debes devolver 1 si se cumple el criterio de filtro correspondiente y 0 en caso contrario. - ¡Asegúrate de especificar el alias al referenciar una columna, como
ir.IncidentDateoit.IncidentType!
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
SELECT
it.IncidentType,
-- Fill in the appropriate expression
SUM(___ WHEN ir.NumberOfIncidents > 5 THEN ___ ELSE ___ ___) AS NumberOfBigIncidentDays,
-- Number of incidents will always be at least 1, so
-- no need to check the minimum value, just that it's
-- less than or equal to 5
SUM(___ WHEN ir.NumberOfIncidents <= 5 THEN ___ ELSE ___ ___) AS NumberOfSmallIncidentDays
FROM dbo.IncidentRollup ir
INNER JOIN dbo.IncidentType it
ON ir.IncidentTypeID = it.IncidentTypeID
WHERE
ir.IncidentDate BETWEEN '2019-08-01' AND '2019-10-31'
GROUP BY
it.IncidentType;