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.4
NTILE(number_of_groups)
number_of_groups
Anzahl der Gruppen, positive ganze Zahl
INT

Rückgabewert

Ganze Zahl (BIGINT UNSIGNED) von 1 bis number_of_groups

Beispiele

Drei Gruppen nach Geburtsdatum

MySQL 8.4
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.4
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, ohne ORDER BY werden die Zeilen beliebig auf die Gruppen verteilt.

Siehe auch