CommencezCommencez gratuitement

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

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 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.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