Partager via


PERCENTILE_CONT (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 en fonction d’une distribution continue de la valeur de colonne dans sql Server Moteur de base de données. Le résultat est interpolé et peut ne pas être égal à l’une des valeurs spécifiques de la colonne.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

numeric_literal

Percentile à calculer. La valeur doit être comprise entre 0.0 et 1.0.

WITHIN GROUP ( ORDER BY order_by_expression )

Spécifie une liste de valeurs numériques à trier et sur lesquelles calculer le percentile. Un seul argument order_by_expression est autorisé. L’expression doit correspondre à un type numérique exact ou approximatif, sans aucun autre type de données autorisé. Les types numériques exacts sont int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney et money. Les types numériques approximatifs sont float et real. L’ordre de tri par défaut est croissant.

OVER ( <partition_by_clause> )

Divise le jeu de résultats généré par la FROM clause en partitions auxquelles la fonction centile est appliquée. Pour plus d’informations, consultez SELECT - Clause OVER. La ORDER BY clause et <rows or range clause> la OVER syntaxe ne peuvent pas être spécifiées dans une PERCENTILE_CONT fonction.

Types de retour

float(53)

Prise en charge de la compatibilité

WITHIN GROUP est un mot clé réservé, en commençant par le niveau 110de compatibilité. Pour plus d’informations, voir Niveau de compatibilité ALTER DATABASE.

Notes

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

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

Exemples

Les exemples de code Transact-SQL de cet article sont fondés sur l’échantillon de base de données AdventureWorks2022 ou AdventureWorksDW2022 fourni, que vous pouvez télécharger à partir de la page d’accueil Échantillons et projets communautaires Microsoft SQL Server.

A. Rechercher le salaire médian des employés par service

L’exemple suivant utilise PERCENTILE_CONT et PERCENTILE_DISC recherche le salaire médian des employés dans chaque service. Ces fonctions peuvent ne pas retourner la même valeur. PERCENTILE_CONT interpole la valeur appropriée, qui peut ou non exister dans le jeu de données, tandis que PERCENTILE_DISC retourne toujours une valeur réelle à partir du jeu.

USE AdventureWorks2022;
GO

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)

L’exemple suivant utilise l’exemple AdventureWorksDW2012 de base de données.

B. Rechercher le salaire médian des employés par service

L’exemple suivant utilise PERCENTILE_CONT et PERCENTILE_DISC recherche le salaire médian des employés dans chaque service. Ces fonctions peuvent ne pas retourner la même valeur. PERCENTILE_CONT interpole la valeur appropriée, qui peut ou non exister dans le jeu de données, tandis que PERCENTILE_DISC retourne toujours une valeur réelle à partir du jeu.

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