SQL Server 2012: CUME_DIST() – kumulierte Verteilung eines Wertes


Andreas Rauch

Neben den Erweiterungen der OVER-Klausel wurden auch einige statistische Erweiterungen implementiert. Wollen Sie zum Beispiel wissen, wie häufig ein Wert relativ zum Rest eines Bereiches vorkommt, so kann dies CUME_DIST im Handumdrehen lösen. Das kann nützlich sein, wenn Sie in einer Tabelle Abteilungen und Umsätze sehen. Wollen Sie nun wissen, welcher Umsatz pro Abteilung der höchste war und wie hoch die anderen Umsätze rel. zur aktuellen Position in der Abteilung sind, dann wäre das ein Fall für den CUST_DIME().

 

CREATE TABLE Tab1 (id int identity,Col1 char(2), COL2 int) 
GO
INSERT INTO Tab1 VALUES('IT',5), ('IT',3),  ('IT',2), ('HR',10),('HR',8),('HR',3),('HR',1),('MA',5),('MA',4),('MA',4)
GO

SELECT Col1, COL2,
       CUME_DIST() OVER(PARTITION by COL1 ORDER BY COL2) AS "CUME_DIST()"   FROM Tab1

 

 

und hier das Ergebnis:

Die Spalte CUME_DIST() zeigt, wieviel Prozent der Abteilungen (HR, IT etc.) gleich oder kleiner sind als der aktuelle Wert in Spalte COL2.

Beispielsweise ist in HR in COL2 der höchste Wert. Daher ist CUME_DIST = 1, da alle anderen Werte (100%=1) eben kleiner oder gleich sind als HR. Betrachtet man die 8 in HR, so sind drei Viertel der Werte (8,3,1) kleiner oder gleich als die 8 (3/4 = 0,75)

image

SQL 2008 Administration Training

Kommentare sind geschlossen