Condividi tramite


PERCENT_RANK (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Endpoint di analisi SQL in Microsoft Fabric Warehouse 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 )

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 utilizzano il database campione AdventureWorks2022 o AdventureWorksDW2022, che è possibile scaricare dalla home page di Esempi di Microsoft SQL Server e progetti collettivi.

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;

Il set di risultati è il seguente.

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