CommencezCommencez gratuitement

Calculer la médiane dans SQL Server

SQL Server n'a pas de fonction MEDIAN(). La plus proche est PERCENTILE_CONT(), qui trouve la valeur au n-ième centile dans un jeu de données.

Nous voulons déterminer à quel point la médiane diffère de la moyenne par type d'incident dans notre ensemble sommaire d'incidents. Pour ce faire, nous pouvons comparer la fonction AVG() de l'exercice précédent à PERCENTILE_CONT(). Ce sont des fonctions de fenêtrage que nous verrons plus en détail au chapitre 4. Pour l'instant, sachez que PERCENTILE_CONT() prend en paramètre le centile (un nombre décimal entre 0 et 1). Le centile doit être évalué dans un groupe ordonné à l'intérieur de la clause WITHIN GROUP et OVER une certaine plage si vous devez partitionner les données. Dans la section WITHIN GROUP, nous devons trier selon la colonne dont nous voulons le 50e centile.

Cette activité fait partie du cours

Analyse de séries chronologiques dans SQL Server

Voir le cours

Instructions de l’exercice

  • Insérez la valeur manquante pour PERCENTILE_CONT().
  • Dans la clause WITHIN GROUP(), triez par nombre d'incidents en ordre décroissant.
  • Dans la clause OVER(), partitionnez par IncidentType (la valeur textuelle, et non l'identifiant).

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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;
Modifier et exécuter le code