LoslegenKostenlos loslegen

Median in SQL Server berechnen

Es gibt keine MEDIAN()-Funktion in SQL Server. Am nächsten kommt PERCENTILE_CONT(), das den Wert am n-ten Perzentil in einem Datensatz ermittelt.

Wir möchten herausfinden, wie stark sich der Median vom Mittelwert nach Incident-Typ in unserem Incident-Rollup unterscheidet. Dazu können wir die AVG()-Funktion aus der vorherigen Übung mit PERCENTILE_CONT() vergleichen. Das sind Fensterfunktionen, die wir in Kapitel 4 ausführlicher behandeln. Für den Moment solltest du wissen, dass PERCENTILE_CONT() einen Parameter nimmt, das Perzentil (eine Dezimalzahl von 0 bis 1). Das Perzentil muss innerhalb einer geordneten Gruppe in der WITHIN GROUP-Klausel und OVER einem bestimmten Bereich liegen, wenn du die Daten partitionieren musst. Im Abschnitt WITHIN GROUP müssen wir nach der Spalte sortieren, deren 50. Perzentil wir ermitteln wollen.

Diese Übung ist Teil des Kurses

Zeitreihenanalyse in SQL Server

Kurs anzeigen

Anleitung zur Übung

  • Fülle den fehlenden Wert für PERCENTILE_CONT() aus.
  • Sortiere in der WITHIN GROUP()-Klausel nach der Anzahl der Incidents absteigend.
  • Partitioniere in der OVER()-Klausel nach IncidentType (dem tatsächlichen Textwert, nicht der ID).

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

SELECT DISTINCT
	it.IncidentType,
	AVG(CAST(ir.NumberOfIncidents AS DECIMAL(4,2)))
	    OVER(PARTITION BY it.IncidentType) AS MeanNumberOfIncidents,
    --- Fill in the missing value
	PERCENTILE_CONT(___)
    	-- Inside our group, order by number of incidents DESC
    	WITHIN GROUP (ORDER BY ir.___ DESC)
        -- Do this for each IncidentType value
        OVER (PARTITION BY it.___) AS MedianNumberOfIncidents,
	COUNT(1) OVER (PARTITION BY it.IncidentType) AS NumberOfRows
FROM dbo.IncidentRollup ir
	INNER JOIN dbo.IncidentType it
		ON ir.IncidentTypeID = it.IncidentTypeID
	INNER JOIN dbo.Calendar c
		ON ir.IncidentDate = c.Date
WHERE
	c.CalendarQuarter = 2
	AND c.CalendarYear = 2020;
Code bearbeiten und ausführen