Gefilterte Aggregationen berechnen
Wenn wir die Anzahl des Auftretens eines Ereignisses anhand bestimmter Filterkriterien zählen wollen, können wir Aggregatfunktionen wie SUM(), MIN() und MAX() sowie CASE-Ausdrücke nutzen. Zum Beispiel liefert SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) die Anzahl der Vorfälle, die dem Incident-Typ 1 zugeordnet sind. Wenn du für jeden Incident-Typ eine SUM()-Anweisung einfügst, hast du den Datensatz nach Incident-Type-ID pivotiert.
In diesem Szenario möchte das Management von uns wissen, wie viele „Großvorfall“-Tage im Vergleich zu „Kleinv orfall“-Tagen wir pro Incident-Typ hatten. Das Management definiert einen Großvorfall-Tag als einen Tag mit mehr als 5 Vorkommnissen desselben Incident-Typs, und ein Kleinv orfall-Tag hat zwischen 1 und 5.
Diese Übung ist Teil des Kurses
Zeitreihenanalyse in SQL Server
Anleitung zur Übung
- Ergänze einen
CASE-Ausdruck, mit dem wir dieSUM()-Funktion verwenden, um die Anzahl der Großvorfall- und Kleinv orfall-Tage zu berechnen. - Im
CASE-Ausdruck sollst du 1 zurückgeben, wenn das passende Filterkriterium erfüllt ist, ansonsten 0. - Gib beim Verweis auf eine Spalte unbedingt den Alias an, zum Beispiel
ir.IncidentDateoderit.IncidentType!
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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;