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