ÎncepețiÎncepe gratuit

Calcularea medianei în SQL Server

În SQL Server nu există o funcție MEDIAN(). Cea mai apropiată alternativă este PERCENTILE_CONT(), care returnează valoarea de la percentila n dintr-un set de date.

Vrem să determinăm cât de mult diferă mediana față de medie, în funcție de tipul de incident din setul nostru rezumativ. Pentru aceasta, putem compara funcția AVG() din exercițiul anterior cu PERCENTILE_CONT(). Acestea sunt funcții de fereastră, pe care le vom aborda mai în detaliu în capitolul 4. Deocamdată, reține că PERCENTILE_CONT() primește un parametru reprezentând percentila (un număr zecimal între 0. și 1.). Percentila trebuie specificată în cadrul unui grup ordonat, în clauza WITHIN GROUP, iar dacă este necesar să partiționezi datele, folosești clauza OVER. În secțiunea WITHIN GROUP, trebuie să ordonezi după coloana pentru care dorești percentila 50.

Acest exercițiu face parte din cursul

Analiza seriilor de timp în SQL Server

Vezi cursul

Instrucțiuni pentru exercițiu

  • Completează valoarea lipsă pentru PERCENTILE_CONT().
  • În cadrul clauzei WITHIN GROUP(), ordonează după numărul de incidente în ordine descrescătoare.
  • În clauza OVER(), partiționează după IncidentType (valoarea text efectivă, nu ID-ul).

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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;
Editează și rulează codul