SQL Academy
Premium
Funktionsreferenz

NTILE

Teilt die Zeilen einer Fensterpartition in die angegebene Anzahl ungefähr gleich großer Gruppen und gibt die Gruppennummer der Zeile zurück.

MySQL 8.1
NTILE(number_of_groups) OVER ([PARTITION BY ...] [ORDER BY ...])

Parameter

number_of_groupsINT
Anzahl der Gruppen, positive ganze Zahl
PARTITION BYoptional
Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden; die Gruppen werden in jeder Partition separat gebildet
ORDER BYoptional
Reihenfolge, in der die Zeilen auf die Gruppen verteilt werden; ohne sie ist die Verteilung beliebig

Rückgabewert

Ganze Zahl (BIGINT UNSIGNED) von 1 bis number_of_groups

Beispiele

Drei Gruppen nach Geburtsdatum

MySQL 8.1
SELECT member_name,
	birthday,
	NTILE(3) OVER (
		ORDER BY birthday
	) AS age_group
FROM FamilyMembers;
member_namebirthdayage_group
Headley Quincey1960-05-131
Ernest Forrest1961-09-111
Flavia Quincey1963-02-161
Constance Forrest1968-09-062
Andie Quincey1983-06-052
Lela Quincey1985-06-072
Annie Quincey1988-04-103
Wednesday Addams2005-01-133

Viertelgrenzen nach Bestellsumme

MySQL 8.1
SELECT bucket,
	MIN(total_amount) AS min_amount,
	MAX(total_amount) AS max_amount,
	COUNT(*) AS orders
FROM (
		SELECT total_amount,
			NTILE(4) OVER (
				ORDER BY total_amount
			) AS bucket
		FROM orders
	) AS t
GROUP BY bucket
ORDER BY bucket;
bucketmin_amountmax_amountorders
11.995.97114
25.989.97114
39.9820.97114
421.2999.96114

Details

Wenn sich die Zeilen nicht gleichmäßig aufteilen lassen, bekommen die ersten Gruppen eine Zeile mehr: 8 Zeilen werden auf 3 Gruppen als 3, 3 und 2 verteilt. Gibt es mehr Gruppen als Zeilen, kommt jede Zeile in eine eigene Gruppe. Zeilen mit demselben Wert in ORDER BY können in verschiedenen Gruppen landen.

Siehe auch