NTILE voor het indelen in groepen
Rijen verdelen over kwartielen en percentielbanden
NTILE voor het indelen in groepen is een gratis Voorbereiding op SQL-sollicitatiegesprekken-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Voorbereiding op SQL-sollicitatiegesprekken. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.
Wanneer je bakken van gelijke grootte nodig hebt
Interviewers vragen: "Verdeel klanten in vier gelijke groepen op basis van hun uitgaven," of "In welk deciel valt elke rij?" Het hulpmiddel is NTILE.
NTILE(n) verdeelt gesorteerde rijen zo gelijkmatig mogelijk over n bakken en labelt elke rij met het nummer van de bak, van 1 tot en met n. In deze les leer je hoe de verdeling werkt, hoe ongelijke aantallen worden afgehandeld en waarin dit verschilt van rangschikken.
Basis-syntaxis van NTILE
NTILE(4), toegepast op rijen die op een waarde zijn gesorteerd, levert kwartielen op. Zoals alle vensterfuncties heeft deze een OVER-clausule nodig; de ORDER BY daarin bepaalt welke rijen in de lage bakken en welke in de hoge bakken terechtkomen.
Oplopend sorteren zet de kleinste waarden in bak 1; aflopend sorteren draait dit om.
SELECT
customer_id,
total_spend,
NTILE(4) OVER (ORDER BY total_spend) AS spend_quartile
FROM customers;Hoe NTILE rijen verdeelt
Met 12 rijen en NTILE(4) krijgt elke bak precies 12 / 4 = 3 rijen. Bak 1 bevat de laagste 3 waarden en bak 4 de hoogste 3.
Het belangrijkste idee: NTILE splitst op basis van het aantal rijen, niet op basis van waardebereiken. Twee bakken kunnen heel verschillende waardebereiken omvatten zolang ze hetzelfde aantal rijen bevatten.
Ongelijke verdeling
Wat gebeurt er als de rijen niet gelijk verdeeld kunnen worden? Met 10 rijen en NTILE(4) geldt 10 / 4 = 2 met rest 2. NTILE geeft de eerste bakken de extra rijen.
- Bak 1: 3 rijen
- Bak 2: 3 rijen
- Bak 3: 2 rijen
- Bak 4: 2 rijen
De bakgroottes verschillen dus hoogstens één en de grotere bakken komen eerst. Deze exacte regel is een geliefd detail in sollicitatiegesprekken.
NTILE negeert gelijke waarden
Belangrijke valkuil: NTILE zorgt er niet voor dat gelijke waarden in dezelfde bak blijven. De verdeling gebeurt op basis van positie, waardoor twee rijen met dezelfde total_spend uitsluitend door hun rijvolgorde in verschillende bakken kunnen terechtkomen.
Als het bedrijf vereist dat gelijke waarden hetzelfde niveau krijgen, is NTILE het verkeerde hulpmiddel; dan heb je een aanpak op basis van waarden nodig. Interviewers zetten deze valkuil bewust in.
Decielen en percentielen
Het aantal bakken is simpelweg het getal dat je meegeeft. NTILE(10) levert decielen op en NTILE(100) percentielklassen. Zo delen analisten gebruikers in prestatieniveaus of risicoklassen in.
De uitvoer is het nummer van de klasse, dus een waarde in bak 9 van NTILE(10) valt in het op één na hoogste deciel.
SELECT
user_id,
score,
NTILE(10) OVER (ORDER BY score DESC) AS decile
FROM leaderboard;Bakken per groep
Voeg PARTITION BY toe om binnen elke groep afzonderlijk bakken te maken, bijvoorbeeld kwartielen van uitgaven per regio. Elke regio begint opnieuw bij bak 1.
Dit beantwoordt vragen zoals "klanten in het hoogste kwartiel binnen elke regio", waarbij een regio met lage totale uitgaven toch een eigen bak 4 heeft.
SELECT
region,
customer_id,
total_spend,
NTILE(4) OVER (
PARTITION BY region
ORDER BY total_spend DESC
) AS regional_quartile
FROM customers;Filteren op een specifiek niveau
Je kunt NTILE(...) niet rechtstreeks in een WHERE-clausule zetten; vensterfuncties worden na WHERE berekend. Wikkel de query in een CTE of subquery en filter daarna op de kolom met het baknummer.
Dit patroon, "geef me het hoogste kwartiel van de besteders", is de meest voorkomende manier waarop NTILE in een echt antwoord voorkomt.
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 versus percentielen op basis van waarden
NTILE maakt bakken met evenveel rijen. Als je in plaats daarvan een echt statistisch percentiel nodig hebt, dus de waarde op het 90e percentiel, gebruik je PERCENTILE_CONT of PERCENTILE_DISC.
- NTILE(100): in welke percentielklasse een rij valt, op basis van rangpositie.
- PERCENTILE_CONT(0.9): de werkelijke waarde op het 90e percentiel.
Als je dit onderscheid kent, geef je een zelfverzekerd antwoord in plaats van een gok.
Wanneer ORDER BY belangrijk is
NTILE vereist een ORDER BY binnen OVER; zonder een gedefinieerde volgorde hebben de bakken geen betekenis. De richting bepaalt welk uiteinde bak 1 is.
Als gelijke waarden de toewijzing onduidelijk maken en de exacte bak van een rij op de grens belangrijk is, voeg je een kolom toe om gelijke waarden in de sortering te onderscheiden. Zo krijg je deterministische, reproduceerbare resultaten.
Bakken een naam geven
Ruwe baknummers (1, 2, 3, 4) zijn zelden het uiteindelijke resultaat. Analisten vertalen ze meestal naar bedrijfslabels zoals Laag, Gemiddeld, Hoog en Beste met een CASE-expressie over het NTILE-resultaat.
Bereken NTILE in een CTE en vertaal het nummer vervolgens in de buitenste query. Zo blijft de vensterlogica overzichtelijk en is de uitvoer klaar voor presentatie.
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;Korte controle
Controleer je kennis van de regel voor ongelijke verdeling.
Samenvatting
NTILE verdeelt gesorteerde rijen in bakken met evenveel rijen:
NTILE(n)labelt rijen met 1..n;NTILE(4)levert kwartielen op enNTILE(10)decielen.- De verdeling gebeurt op basis van het aantal rijen, niet van het waardebereik, en extra rijen gaan naar de eerste bakken.
- Gelijke waarden blijven niet bij elkaar en NTILE kan niet rechtstreeks in
WHEREworden gebruikt. - Gebruik voor een echte percentielwaarde
PERCENTILE_CONT.
Vervolgens: grenswaarden ophalen met FIRST_VALUE, LAST_VALUE en randen van het vensterbereik.
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “NTILE voor het indelen in groepen” gratis?
Ja — de volledige tekst van “NTILE voor het indelen in groepen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Voorbereiding op SQL-sollicitatiegesprekken wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.
Wat leer ik in “NTILE voor het indelen in groepen”?
Rijen verdelen over kwartielen en percentielbanden Je oefent met Voorbereiding op SQL-sollicitatiegesprekken door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Voorbereiding op SQL-sollicitatiegesprekken te beginnen?
Ervaring vooraf is niet nodig. Voorbereiding op SQL-sollicitatiegesprekken op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “NTILE voor het indelen in groepen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Voorbereiding op SQL-sollicitatiegesprekken?
Ja. Elke les over Voorbereiding op SQL-sollicitatiegesprekken bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- LAG en LEAD voor aangrenzende rijen
- Verandering van periode tot periode
- NTILE voor het indelen in groepen
- FIRST_VALUE, LAST_VALUE en framegrenzen