Calcul d'agrégats filtrés
Si nous voulons compter le nombre d'occurrences d'un événement selon certains critères de filtrage, nous pouvons tirer parti des fonctions d'agrégation comme SUM(), MIN() et MAX(), ainsi que des expressions CASE. Par exemple, SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) renverra le nombre d'incidents associés au type d'incident 1. Si vous incluez une instruction SUM() pour chaque type d'incident, vous avez effectué une rotation des données par identifiant de type d'incident.
Dans ce scénario, la direction souhaite que nous lui indiquions, par type d'incident, combien de journées à « gros incidents » nous avons eues par rapport aux journées à « petits incidents ». La direction définit une journée à gros incidents comme ayant plus de 5 occurrences du même type d'incident au cours de la même journée, et une journée à petits incidents comme ayant entre 1 et 5 occurrences.
Cette activité fait partie du cours
Analyse de séries chronologiques dans SQL Server
Instructions de l’exercice
- Complétez une expression
CASEqui nous permet d'utiliser la fonctionSUM()pour calculer le nombre de journées à gros incidents et à petits incidents. - Dans l'expression
CASE, vous devez retourner 1 si le critère de filtrage approprié est respecté, sinon 0. - Assurez-vous d'indiquer l'alias lorsque vous faites référence à une colonne, comme
ir.IncidentDateouit.IncidentType!
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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;