Share via


CUME_DIST (Transact-SQL)

Berechnet die kumulierte Verteilung eines Werts innerhalb einer Gruppe von Werte in SQL Server 2012. CUME_DIST berechnet somit die relative Position eines angegebenen Werts in einer Gruppe von Werten. Eine aufsteigende Reihenfolge vorausgesetzt, entspricht für eine Zeile r der CUME_DIST-Wert von r die Anzahl der Zeilen mit Werten, die kleiner oder gleich dem Wert von r geteilt durch die Anzahl der ausgewerteten Zeilen in der Partition oder dem Abfrageresultset sind. CUME_DIST ähnelt der PERCENT_RANK-Funktion.

Syntax

CUME_DIST( )
    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. Der order_by_clause ist erforderlich. Die <Zeilen- oder Bereichsklausel> der OVER-Syntax kann für die CUME_DIST-Funktion nicht angegeben werden. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL).

Rückgabetypen

float(53)

Allgemeine Hinweise

Der von CUME_DIST zurückgegebene Wertebereich ist größer als 0 und kleiner oder gleich 1. Gleichwertige Werte ergeben immer den gleichen kumulierten Verteilungswert. 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 prozentualen Rang des Gehalts des Mitarbeiters innerhalb einer Abteilung. 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 logisch. Die ORDER BY-Klausel in der SELECT-Anweisung bestimmt die Anzeigereihenfolge des Resultsets.

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)

Siehe auch

Verweis

PERCENT_RANK (Transact-SQL)