PERCENT_RANK (Transact-SQL)
Berechnet den relativen Rang einer Zeile innerhalb einer Gruppe von Zeilen in SQL Server 2012. Mit PERCENT_RANK können Sie den relativen rang eines Werts innerhalb eines Abfrageresultsets oder einer Partition ermitteln. PERCENT_RANK ähnelt der CUME_DIST-Funktion.
Syntax
PERCENT_RANK( )
OVER ( [ partition_by_clause ] order_by_clause )
Argumente
- OVER ( [ partition_by_clause ] order_by_clause**)**
partition_by_clause teilt das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die Funktion angewendet wird. Wird dies nicht angegeben, verarbeitet die Funktion alle Zeilen des Abfrageresultsets als einzelne Gruppe. order_by_clause bestimmt die logische Reihenfolge, in der die Operation ausgeführt wird. Die Angabe order_by_clause ist erforderlich. Die <Zeilen- oder Bereichsklausel> der OVER-Syntax kann nicht in einer PERCENT_RANK-Funktion angegeben werden. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL).
Rückgabetypen
float(53)
Allgemeine Hinweise
Der von PERCENT_RANK zurückgegebene Wertebereich ist größer als 0 und kleiner oder gleich 1. Die erste Zeile in einem Satz hat einen PERCENT_RANK von 0. NULL-Werte sind standardmäßig eingeschlossen und werden als niedrigste mögliche Werte behandelt.
Beispiele
Das folgende Beispiel berechnet das Gehaltsquantil für jeden Mitarbeiter innerhalb einer angegebenen Abteilung mithilfe der CUME_DIST-Funktion. Der von der CUME_DIST-Funktion zurückgegebene Wert stellt den Prozentsatz der Mitarbeitern dar, deren Gehalt kleiner oder gleich dem des aktuellen Mitarbeiters in der gleichen Abteilung ist. Die PERCENT_RANK-Funktion berechnet den Rang des Gehalts des Mitarbeiters innerhalb einer Abteilung als Prozentsatz. Um die Zeilen im Resultset nach Abteilung zu partitionieren, wird die PARTITION BY-Klausel angegeben. Die ORDER BY-Klausel in der OVER-Klausel sortiert die Zeilen in jeder Partition. Die ORDER BY-Klausel in der SELECT-Anweisung sortiert die Zeilen im gesamten Resultset.
USE AdventureWorks2012;
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;
Dies ist das Resultset.
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
(15 row(s) affected)