Condividi tramite


PERCENT_RANK (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsEndpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft Fabric

Calcola il rango relativo di una riga all'interno di un gruppo di righe in SQL Server. Usare PERCENT_RANK per valutare la posizione relativa di un valore all'interno di un set di risultati o una partizione di query. PERCENT_RANK è simile alla funzione CUME_DIST .

Sintassi

PERCENT_RANK( )
    OVER ( [ partition_by_clause ] order_by_clause )

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

OVER ( [ partition_by_clause ] order_by_clause )

Il primo parametro, partition_by_clause, divide il set di risultati prodotto dalla FROM clausola in partizioni a cui viene applicata la funzione. Se non specificato, la funzione tratta tutte le righe del set di risultati della query come un unico gruppo. Il secondo parametro, order_by_clause, determina l'ordine logico in cui viene eseguita l'operazione. order_by_clause è obbligatorio. La <rows or range clause> proprietà della OVER sintassi non può essere specificata in una PERCENT_RANK funzione. Per altre informazioni, vedere Clausola SELECT - OVER.

Tipi restituiti

float(53)

Osservazioni:

L'intervallo di valori restituiti da PERCENT_RANK è maggiore 0 di e minore o uguale a 1. La prima riga in qualsiasi set ha un PERCENT_RANK valore di 0. NULL i valori sono inclusi per impostazione predefinita e vengono considerati come i valori più bassi possibili.

PERCENT_RANK è non deterministico. Per altre informazioni, vedere Funzioni deterministiche e non deterministiche.

Esempi

Gli esempi di codice Transact-SQL in questo articolo usano il AdventureWorks2022 database di esempio o AdventureWorksDW2022 , che è possibile scaricare dalla home page degli esempi di Microsoft SQL Server e dei progetti della community.

Nell'esempio seguente viene usata la CUME_DIST funzione per calcolare il percentile di stipendio per ogni dipendente all'interno di un determinato reparto. Il valore restituito dalla CUME_DIST funzione rappresenta la percentuale di dipendenti che hanno uno stipendio minore o uguale al dipendente corrente nello stesso reparto. La PERCENT_RANK funzione calcola il rango dello stipendio del dipendente all'interno di un reparto come percentuale. La PARTITION BY clausola viene specificata per partizionare le righe nel set di risultati in base al reparto. La ORDER BY clausola nella OVER clausola ordina le righe in ogni partizione. La ORDER BY clausola nell'istruzione SELECT ordina le righe nell'intero set di risultati.

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;

Questo è il set di risultati.

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