PERCENTILE_DISC (Transact-SQL)

Calcule un percentile spécifique pour des valeurs triées dans un ensemble de lignes entier ou dans des partitions distinctes d'un ensemble de lignes dans SQL Server 2012. Pour une valeur de percentile donnée P, PERCENTILE_DISC trie les valeurs de l'expression dans la clause ORDER BY et retourne la valeur ayant la plus petite valeur CUME_DIST (en ce qui concerne 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 percentile selon une répartition discrète des valeurs de colonne ; le résultat est égale à une valeur spécifique dans la colonne.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL (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 order_by_expression [ ASC | DESC ])
    Spécifie une liste de valeurs numériques à trier et sur lesquelles calculer le percentile. Un seul order_by_expression est autorisé. Par défaut, le tri s'effectue par ordre croissant.

  • OVER ( <partition_by_clause> )
    Divise le jeu de résultats généré par la clause FROM en partitions auxquelles la fonction percentile est appliquée. Pour plus d'informations, consultez Clause OVER (Transact-SQL). La <clause ORDER BY> et la <clause de lignes ou de plage> ne peuvent pas être spécifiées dans une fonction PERCENTILE_DISC.

Type des valeurs retournées

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, 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.

Exemples

A.Exemple de syntaxe de base

L'exemple suivant utilise PERCENTILE_CONT et PERCENTILE_DISC pour rechercher le salaire d'employé médian dans chaque service. Notez que ces fonctions peuvent ne pas retourner la même valeur. Cela est dû au fait que PERCENTILE_CONT interpole la valeur appropriée, qu'elle existe ou non dans le jeu de données, alors que PERCENTILE_DISC retourne toujours une valeur réelle à partir du jeu.

USE AdventureWorks2012;

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

Voir aussi

Référence

PERCENTILE_CONT (Transact-SQL)