Partager via


PERCENT_RANK (Transact-SQL)

S’applique à : SQL Server base de données Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Point de terminaison analytique SQL dans Microsoft Fabric Entrepôt dans Microsoft Fabric

Calcule le rang relatif d'une ligne dans un groupe de lignes dans SQL Server. Permet PERCENT_RANK d’évaluer la position relative d’une valeur dans un jeu de résultats de requête ou une partition. PERCENT_RANK est similaire à la fonction CUME_DIST .

Syntaxe

PERCENT_RANK( )
    OVER ( [ partition_by_clause ] order_by_clause )

Arguments

OVER ( [ partition_by_clause ] order_by_clause )

Le premier paramètre, partition_by_clause, divise le jeu de résultats produit par la FROM clause en partitions auxquelles la fonction est appliquée. S'il n'est pas spécifié, la fonction gère toutes les lignes du jeu de résultats de la requête en un seul groupe. Le deuxième paramètre, order_by_clause, détermine l’ordre logique dans lequel l’opération est effectuée. order_by_clause est requis. OVER La <rows or range clause> syntaxe ne peut pas être spécifiée dans une PERCENT_RANK fonction. Pour plus d’informations, consultez SELECT - Clause OVER.

Types de retour

float(53)

Notes

La plage de valeurs retournées par PERCENT_RANK est supérieure 0 et inférieure ou égale à 1. La première ligne d’un jeu a un PERCENT_RANK .0 NULL les valeurs sont incluses par défaut et sont traitées comme les valeurs possibles les plus basses.

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

L’exemple suivant utilise la CUME_DIST fonction pour calculer le centile de salaire pour chaque employé au sein d’un service donné. La valeur retournée par la CUME_DIST fonction représente le pourcentage d’employés qui ont un salaire inférieur ou égal à l’employé actuel du même service. La PERCENT_RANK fonction calcule le rang du salaire de l’employé au sein d’un service sous la forme d’un pourcentage. La PARTITION BY clause est spécifiée pour partitionner les lignes dans le jeu de résultats par service. La ORDER BY clause de la OVER clause trie les lignes de chaque partition. La ORDER BY clause de l’instruction SELECT trie les lignes dans l’ensemble du jeu de résultats.

USE AdventureWorks2022;
GO

SELECT Department,
    LastName,
    Rate,
    CUME_DIST() OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist,
    PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate) AS PctRank
FROM HumanResources.vEmployeeDepartmentHistory AS edh
INNER JOIN HumanResources.EmployeePayHistory AS e
    ON e.BusinessEntityID = edh.BusinessEntityID
WHERE Department IN (N'Information Services', N'Document Control')
ORDER BY Department, Rate DESC;

Voici le jeu de résultats.

Department             LastName               Rate              CumeDist           PctRank
---------------------- ---------------------- ----------------- ------------------ ------------------
Document Control       Arifin                 17.7885           1                  1
Document Control       Norred                 16.8269           0.8                0.5
Document Control       Kharatishvili          16.8269           0.8                0.5
Document Control       Chai                   10.25             0.4                0
Document Control       Berge                  10.25             0.4                0
Information Services   Trenary                50.4808           1                  1
Information Services   Conroy                 39.6635           0.9                0.888888888888889
Information Services   Ajenstat               38.4615           0.8                0.666666666666667
Information Services   Wilson                 38.4615           0.8                0.666666666666667
Information Services   Sharma                 32.4519           0.6                0.444444444444444
Information Services   Connelly               32.4519           0.6                0.444444444444444
Information Services   Berg                   27.4038           0.4                0
Information Services   Meyyappan              27.4038           0.4                0
Information Services   Bacon                  27.4038           0.4                0
Information Services   Bueno                  27.4038           0.4                0