PERCENTILE_DISC (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric

Calcule un centile spécifique pour les valeurs triées dans la totalité d’un ensemble de lignes ou dans des partitions distinctes de l’ensemble dans SQL Server. Pour une valeur de centile donnée P, PERCENTILE_DISC trie les valeurs de l’expression dans la clause ORDER BY. Il retourne ensuite la valeur ayant la plus petite valeur CUME_DIST donnée (pour la même spécification de tri) supérieure ou égale à P. Par exemple, PERCENTILE_DISC (0.5) calcule le cinquantième percentile (autrement dit, la valeur médiane) d’une expression. PERCENTILE_DISC calcule le centile à partir d’une distribution discrète des valeurs de la colonne. Le résultat est égal à une valeur spécifique dans la colonne.

Conventions de la syntaxe Transact-SQL

Syntaxe

PERCENTILE_DISC ( numeric_literal ) WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )  
    OVER ( [ <partition_by_clause> ] )  

Arguments

literal
Percentile à calculer. Il doit être compris entre 0.0 et 1.0.

WITHIN GROUP ( ORDER BY expression_order_by [ ASC | DESC)**
Spécifie la liste des valeurs à trier et sur lesquelles calculer le percentile. Un seul argument order_by_expression est autorisé. L’ordre de tri par défaut est croissant. La liste des valeurs peut être d’un des types de données qui sont valides pour l’opération de tri.

OVER (<partition_by_clause>)**
Divise le jeu de résultats de la clause FROM en partitions. La fonction de centile est appliquée à ces partitions. Pour plus d’informations, consultez Clause OVER (Transact-SQL). Il n’est pas possible de spécifier la <clause ORDER BY> ou la <clause ROWS ou RANGE> dans une fonction PERCENTILE_DISC.

Types de retour

Le type de retour est déterminé par le type order_by_expression.

Prise en charge de la compatibilité

Lorsque le niveau de compatibilité est 110 et supérieur, WITHIN GROUP est un mot clé réservé. Pour plus d’informations, consultez Niveau de compatibilité ALTER DATABASE (Transact-SQL).

Remarques d'ordre général

Toutes les valeurs NULL dans le jeu de données sont ignorées.

PERCENTILE_DISC n'est pas déterministe. Pour plus d’informations, consultez Fonctions déterministes et non déterministes.

Exemples

Exemple de syntaxe de base

L'exemple suivant utilise PERCENTILE_CONT et PERCENTILE_DISC pour trouver le salaire médian des employés dans chaque service. Ces fonctions ne retournent pas forcément la même valeur :

  • PERCENTILE_CONT retourne la valeur correspondante, même si elle n’existe pas dans le jeu de données.
  • PERCENTILE_DISC retourne une valeur réelle du jeu.
USE AdventureWorks2022;  
  
SELECT DISTINCT Name AS DepartmentName  
      ,PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ph.Rate)   
                            OVER (PARTITION BY Name) AS MedianCont  
      ,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY ph.Rate)   
                            OVER (PARTITION BY Name) AS MedianDisc  
FROM HumanResources.Department AS d  
INNER JOIN HumanResources.EmployeeDepartmentHistory AS dh   
    ON dh.DepartmentID = d.DepartmentID  
INNER JOIN HumanResources.EmployeePayHistory AS ph  
    ON ph.BusinessEntityID = dh.BusinessEntityID  
WHERE dh.EndDate IS NULL;  

Voici un jeu de résultats partiel.

DepartmentName        MedianCont    MedianDisc
Document Control       16.8269      16.8269
Engineering            34.375       32.6923
Executive              54.32695     48.5577
Human Resources        17.427850    16.5865

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

Exemple de syntaxe de base

L'exemple suivant utilise PERCENTILE_CONT et PERCENTILE_DISC pour trouver le salaire médian des employés dans chaque service. Ces fonctions ne retournent pas forcément la même valeur :

  • PERCENTILE_CONT retourne la valeur correspondante, même si elle n’existe pas dans le jeu de données.
  • PERCENTILE_DISC retourne une valeur réelle du jeu.
-- Uses AdventureWorks  
  
SELECT DISTINCT DepartmentName  
       ,PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BaseRate)  
        OVER (PARTITION BY DepartmentName) AS MedianCont  
       ,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY BaseRate)  
        OVER (PARTITION BY DepartmentName) AS MedianDisc  
FROM dbo.DimEmployee;  

Voici un jeu de résultats partiel.

DepartmentName        MedianCont    MedianDisc  
--------------------   ----------   ----------  
Document Control       16.826900    16.8269  
Engineering            34.375000    32.6923  
Human Resources        17.427850    16.5865  
Shipping and Receiving  9.250000     9.0000

Voir aussi

PERCENTILE_CONT (Transact-SQL)