SQL Academy
Premium
Funktionsreferenz

CUME_DIST

Gibt den kumulierten Anteil zurück: welcher Teil der Zeilen der Partition nicht später als die aktuelle steht.

MySQL 8.1
CUME_DIST() OVER ([PARTITION BY ...] [ORDER BY ...])

Parameter

PARTITION BYoptional
Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden; der Anteil wird in jeder separat berechnet
ORDER BYoptional
Reihenfolge der Zeilen, nach der der Anteil berechnet wird; ohne sie bekommen alle Zeilen 1

Rückgabewert

Gleitkommazahl (DOUBLE) größer als 0 und höchstens 1

Beispiele

CUME_DIST und PERCENT_RANK nach Status

MySQL 8.1
SELECT member_name,
	status,
	CUME_DIST() OVER (
		ORDER BY status
	) AS status_cume_dist,
	PERCENT_RANK() OVER (
		ORDER BY status
	) AS status_percent_rank
FROM FamilyMembers;
member_namestatusstatus_cume_diststatus_percent_rank
Lela Quinceydaughter0.3750
Annie Quinceydaughter0.3750
Wednesday Addamsdaughter0.3750
Headley Quinceyfather0.6250.42857142857142855
Ernest Forrestfather0.6250.42857142857142855
Flavia Quinceymother0.8750.7142857142857143
Constance Forrestmother0.8750.7142857142857143
Andie Quinceyson11

Günstigstes Viertel der Waren

MySQL 8.1
SELECT name,
	price
FROM (
		SELECT name,
			price,
			CUME_DIST() OVER (
				ORDER BY price
			) AS share_cheaper_or_equal
		FROM products
	) AS t
WHERE share_cheaper_or_equal <= 0.25;
nameprice
Mineral Water 1L1.99
Coca-Cola 0.5L2.49
Chips Pack2.99

Details

Der Wert ist die Anzahl der Zeilen, deren Wert in ORDER BY nicht größer als der aktuelle ist, geteilt durch die Anzahl der Zeilen in der Partition. Anders als bei PERCENT_RANK zählen die aktuelle Zeile und gleiche Zeilen zum Anteil, daher ist das Ergebnis nie 0 und bei der letzten Zeile 1. Die Bedingung CUME_DIST() <= 0.25 in der äußeren Abfrage wählt das erste Viertel der Zeilen aus.

Siehe auch