Calcolare aggregazioni filtrate
Se vuoi contare quante volte si verifica un evento dato un certo filtro, puoi sfruttare funzioni di aggregazione come SUM(), MIN() e MAX(), insieme alle espressioni CASE. Ad esempio, SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) restituisce il numero di incidenti associati al tipo di incidente 1. Se includi una dichiarazione SUM() per ciascun tipo di incidente, avrai effettuato un pivot dell'insieme di dati per ID tipo di incidente.
In questo scenario, la direzione vuole sapere, per tipo di incidente, quanti giorni con "big-incident" abbiamo avuto rispetto ai giorni con "small-incident". La direzione definisce un giorno con big-incident come un giorno con più di 5 occorrenze dello stesso tipo di incidente nello stesso giorno, mentre un giorno con small-incident ha tra 1 e 5 occorrenze.
Questo esercizio fa parte del corso
Analisi delle serie temporali in SQL Server
Istruzioni dell'esercizio
- Compila un'espressione
CASEche ci permetta di usare la funzioneSUM()per calcolare il numero di giorni con big-incident e small-incident. - Nell'espressione
CASE, restituisci 1 se il criterio di filtro appropriato è soddisfatto e 0 altrimenti. - Ricordati di specificare l'alias quando fai riferimento a una colonna, ad esempio
ir.IncidentDateoit.IncidentType!
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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;