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;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;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.