LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Ergänze einen CASE-Ausdruck, mit dem wir die SUM()-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.IncidentDate oder it.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;
Code bearbeiten und ausführen