Voorbereiding op programmeerinterviews · Les

NTILE voor het indelen in groepen

Rijen verdelen over kwartielen en percentielbanden

Les 3 van 413 stappen

NTILE voor het indelen in groepen is een gratis Voorbereiding op programmeerinterviews-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 programmeerinterviews. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Voorbereiding op programmeerinterviews 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 en NTILE(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 WHERE worden gebruikt.
  • Gebruik voor een echte percentielwaarde PERCENTILE_CONT.

Vervolgens: grenswaarden ophalen met FIRST_VALUE, LAST_VALUE en randen van het vensterbereik.

Gratis beginnen

Leer Voorbereiding op programmeerinterviews 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
90
Lessen
360

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 programmeerinterviews wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Voorbereiding op programmeerinterviews 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 programmeerinterviews 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 programmeerinterviews te beginnen?

Ervaring vooraf is niet nodig. Voorbereiding op programmeerinterviews 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 programmeerinterviews?

Ja. Elke les over Voorbereiding op programmeerinterviews 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

  1. LAG en LEAD voor aangrenzende rijen
  2. Verandering van periode tot periode
  3. NTILE voor het indelen in groepen
  4. FIRST_VALUE, LAST_VALUE en framegrenzen
← Terug naar Voorbereiding op programmeerinterviews