CommencerCommencez gratuitement

Calcul d’agrégats filtrés

Si vous souhaitez compter le nombre d’occurrences d’un événement selon certains critères de filtrage, vous pouvez exploiter 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é un pivot du jeu de données par identifiant de type d’incident.

Dans ce scénario, la direction souhaite que vous indiquiez, par type d’incident, combien de jours à « grands incidents » nous avons eus par rapport aux jours à « petits incidents ». La direction définit un jour à grands incidents comme ayant plus de 5 occurrences du même type d’incident le même jour, et un jour à petits incidents comme ayant entre 1 et 5.

Cet exercice fait partie du cours

<cours>Analyse de séries temporelles dans SQL Server</cours>
Voir le cours

Instructions de l’exercice

  • Complétez une expression CASE qui nous permet d’utiliser la fonction SUM() pour calculer le nombre de jours à grands incidents et à petits incidents.
  • Dans l’expression CASE, vous devez renvoyer 1 si le critère de filtrage approprié est satisfait et 0 sinon.
  • Veillez à préciser l’alias lors de la référence à une colonne, comme ir.IncidentDate ou it.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;
Modifier et exécuter le code