Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Point de terminaison d’analytique SQL dans Microsoft Fabric
Entrepôt dans Microsoft Fabric
Base de données SQL dans 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 d’expression dans la ORDER BY clause. Elle retourne ensuite la valeur avec la plus CUME_DIST petite valeur donnée (en ce qui concerne la même spécification de tri) supérieure ou égale à P. Par exemple, PERCENTILE_DISC (0.5) calcule le 50e centile (c’est-à-dire la médiane) d’une expression.
PERCENTILE_DISC calcule le centile en fonction d’une distribution discrète des valeurs de 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.
AU SEIN DU GROUPE ( ORDRE PAR order_by_expression [ 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.
TERMINÉ ( <partition_by_clause> )
Divise le jeu de résultats de la FROM clause en partitions. La fonction de centile est appliquée à ces partitions. Pour plus d’informations, consultez la clause SELECT - OVER. La <clause> ORDER BY et <les lignes ou la clause>de plage ne peuvent pas être spécifiées dans une PERCENTILE_DISC fonction.
Types de retour
Le type de retour est déterminé par le type order_by_expression.
Prise en charge de la compatibilité
Sous le niveau de compatibilité 110 et supérieur, WITHIN GROUP est un mot clé réservé. Pour plus d’informations, consultez le niveau de compatibilité ALTER DATABASE.
Remarques
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 recherche le salaire médian de chaque service. Ils peuvent ne pas retourner la même valeur :
-
PERCENTILE_CONTretourne la valeur appropriée, même si elle n’existe pas dans le jeu de données. -
PERCENTILE_DISCretourne une valeur définie réelle.
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 recherche le salaire médian de chaque service. Ils peuvent ne pas retourner la même valeur :
-
PERCENTILE_CONTretourne la valeur appropriée, même si elle n’existe pas dans le jeu de données. -
PERCENTILE_DISCretourne une valeur définie réelle.
-- 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