Mit NTILE Daten in Gruppen einteilen
Zeilen in Quartile und Perzentilbereiche aufteilen
Mit NTILE Daten in Gruppen einteilen ist eine kostenlose SQL Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Wenn Sie gleich große Buckets brauchen
Interviewer fragen: „Teilen Sie Kunden in vier gleich große Ausgabengruppen auf“ oder „In welchem Dezil liegt jede Zeile?“ Das passende Werkzeug ist NTILE.
NTILE(n) verteilt geordnete Zeilen so gleichmäßig wie möglich auf n Buckets und kennzeichnet jede Zeile mit ihrer Bucketnummer von 1 bis n. In dieser Lektion erfahren Sie, wie die Aufteilung funktioniert, wie ungleichmäßige Anzahlen behandelt werden und worin der Unterschied zum Ranking besteht.
Grundlegende NTILE-Syntax
NTILE(4) über nach einem Wert sortierte Zeilen erzeugt Quartile. Wie alle Fensterfunktionen benötigt es eine OVER-Klausel; das darin enthaltene ORDER BY entscheidet, welche Zeilen in die niedrigen beziehungsweise hohen Buckets gelangen.
Bei aufsteigender Sortierung kommen die kleinsten Werte in Bucket 1; bei absteigender Sortierung wird dies umgekehrt.
SELECT
customer_id,
total_spend,
NTILE(4) OVER (ORDER BY total_spend) AS spend_quartile
FROM customers;So verteilt NTILE die Zeilen
Bei 12 Zeilen und NTILE(4) erhält jeder Bucket genau 12 / 4 = 3 Zeilen. Bucket 1 enthält die 3 niedrigsten Werte, Bucket 4 die 3 höchsten.
Die entscheidende Idee lautet: NTILE teilt nach der Anzahl der Zeilen, nicht nach Wertebereichen. Zwei Buckets können sehr unterschiedliche Wertebereiche abdecken, solange sie gleich viele Zeilen enthalten.
Ungleichmäßige Aufteilung
Was passiert, wenn sich die Zeilen nicht gleichmäßig aufteilen lassen? Bei 10 Zeilen und NTILE(4) ergibt 10 / 4 = 2 mit Rest 2. NTILE gibt den früheren Buckets die zusätzlichen Zeilen.
- Bucket 1: 3 Zeilen
- Bucket 2: 3 Zeilen
- Bucket 3: 2 Zeilen
- Bucket 4: 2 Zeilen
Die Bucketgrößen unterscheiden sich also höchstens um eins, und die größeren Buckets kommen zuerst. Diese genaue Regel ist ein beliebtes Detail in Interviews.
NTILE ignoriert Gleichstände bei Werten
Wichtiger Fallstrick: NTILE sorgt nicht dafür, dass gleiche Werte im selben Bucket bleiben. Die Aufteilung erfolgt nach Position, sodass zwei Zeilen mit identischem total_spend allein aufgrund der Zeilenreihenfolge in verschiedenen Buckets landen können.
Wenn gleiche Werte laut Geschäftsanforderung derselben Stufe zugeordnet werden müssen, ist NTILE das falsche Werkzeug; Sie benötigen stattdessen einen wertbasierten Ansatz. Interviewer bauen diese Falle absichtlich ein.
Dezile und Perzentile
Die Anzahl der Buckets ist einfach die Zahl, die Sie übergeben. NTILE(10) liefert Dezile, NTILE(100) Perzentilbereiche. So teilen Analysten Benutzer in Leistungsstufen oder Risikoklassen ein.
Das Ergebnis ist die Nummer des Bereichs. Ein Wert in Bucket 9 von NTILE(10) liegt also im zweithöchsten Dezil.
SELECT
user_id,
score,
NTILE(10) OVER (ORDER BY score DESC) AS decile
FROM leaderboard;Buckets pro Gruppe
Fügen Sie PARTITION BY hinzu, um die Buckets unabhängig voneinander innerhalb jeder Gruppe zu bilden, zum Beispiel Ausgabenquartile pro Region. Jede Region beginnt wieder bei Bucket 1.
Damit lassen sich Fragen beantworten wie „Welche Kunden gehören innerhalb jeder Region zum obersten Quartil?“, wobei auch eine Region mit insgesamt niedrigen Ausgaben ihren eigenen Bucket 4 hat.
SELECT
region,
customer_id,
total_spend,
NTILE(4) OVER (
PARTITION BY region
ORDER BY total_spend DESC
) AS regional_quartile
FROM customers;Nach einer bestimmten Stufe filtern
Sie können NTILE(...) nicht direkt in einer WHERE-Klausel verwenden; Fensterfunktionen werden erst nach WHERE berechnet. Kapseln Sie die Abfrage in einer CTE oder Unterabfrage und filtern Sie anschließend nach der Bucket-Spalte.
Dieses Muster – „Geben Sie mir das oberste Ausgabenquartil“ – ist die häufigste Verwendung von NTILE in einer realistischen Lösung.
WITH q AS (
SELECT customer_id, total_spend,
NTILE(4) OVER (ORDER BY total_spend DESC) AS quartile
FROM customers
)
SELECT customer_id, total_spend
FROM q
WHERE quartile = 1;NTILE im Vergleich zu wertbasierten Perzentilen
NTILE bildet Buckets mit gleich vielen Zeilen. Wenn Sie stattdessen ein echtes statistisches Perzentil benötigen, also den Wert beim 90. Perzentil, verwenden Sie PERCENTILE_CONT oder PERCENTILE_DISC.
- NTILE(100): das Perzentilband, in dem eine Zeile aufgrund ihrer Rangposition liegt.
- PERCENTILE_CONT(0.9): der tatsächliche Wert beim 90. Perzentil.
Wenn Sie diesen Unterschied kennen, geben Sie eine sichere statt einer geratenen Antwort.
Wenn ORDER BY wichtig ist
NTILE benötigt ein ORDER BY innerhalb von OVER; ohne eine definierte Reihenfolge sind die Buckets bedeutungslos. Die Sortierrichtung bestimmt, welches Ende Bucket 1 erhält.
Wenn Gleichstände die Zuordnung uneindeutig machen und der genaue Bucket einer Grenzzeile wichtig ist, fügen Sie der Sortierung eine zusätzliche Spalte als Tie-Breaker hinzu, um deterministische und reproduzierbare Ergebnisse zu erhalten.
Buckets mit Namen versehen
Rohe Bucketnummern (1, 2, 3, 4) sind selten das endgültige Ergebnis. Analysten ordnen sie mit einem CASE-Ausdruck über dem NTILE-Ergebnis normalerweise Geschäftsbezeichnungen wie Niedrig, Mittel, Hoch und Top zu.
Berechnen Sie NTILE in einer CTE und übersetzen Sie die Nummer anschließend in der äußeren Abfrage. So bleibt die Fensterlogik übersichtlich und die Ausgabe ist direkt für die Präsentation geeignet.
WITH q AS (
SELECT customer_id, total_spend,
NTILE(4) OVER (ORDER BY total_spend) AS bucket
FROM customers
)
SELECT customer_id, total_spend,
CASE bucket
WHEN 1 THEN 'Low'
WHEN 2 THEN 'Medium'
WHEN 3 THEN 'High'
WHEN 4 THEN 'Top'
END AS spend_tier
FROM q;Kurzer Test
Testen Sie die Regel für die ungleichmäßige Verteilung.
Zusammenfassung
NTILE verteilt geordnete Zeilen auf Buckets mit gleich vielen Zeilen:
NTILE(n)kennzeichnet Zeilen mit 1..n;NTILE(4)steht für Quartile,NTILE(10)für Dezile.- Die Aufteilung erfolgt nach der Anzahl der Zeilen, nicht nach Wertebereichen, und zusätzliche Zeilen werden den früheren Buckets zugewiesen.
- Gleichstände werden nicht zusammengehalten, und NTILE kann nicht direkt in
WHEREverwendet werden. - Für einen echten Perzentilwert verwenden Sie
PERCENTILE_CONT.
Als Nächstes: Grenzwerte mit FIRST_VALUE, LAST_VALUE und den Grenzen des Fensterrahmens abrufen.
Häufig gestellte Fragen
Ist die Lektion „Mit NTILE Daten in Gruppen einteilen“ kostenlos?
Ja — der vollständige Text von „Mit NTILE Daten in Gruppen einteilen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Mit NTILE Daten in Gruppen einteilen“?
Zeilen in Quartile und Perzentilbereiche aufteilen Du übst SQL Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. SQL Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Mit NTILE Daten in Gruppen einteilen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede SQL Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- LAG und LEAD für benachbarte Zeilen
- Veränderungen von Periode zu Periode
- Mit NTILE Daten in Gruppen einteilen
- FIRST_VALUE, LAST_VALUE und Fenstergrenzen