Forberedelse til SQL-intervju · leksjon

NTILE for inndeling i grupper

Del rader inn i kvartiler og persentilintervaller.

Leksjon 3 av 413 trinn

NTILE for inndeling i grupper er en gratis leksjon i Forberedelse til SQL-intervju på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Forberedelse til SQL-intervju, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.

Når det er behov for like store grupper

Intervjuere spør: «Del kundene inn i fire like store forbruksgrupper» eller «Hvilken desil tilhører hver rad?» Verktøyet er NTILE.

NTILE(n) fordeler sorterte rader på n grupper så jevnt som mulig og merker hver rad med gruppenummeret, fra 1 til n. Denne leksjonen forklarer hvordan fordelingen skjer, hvordan den håndterer ulikt antall rader, og hvordan den skiller seg fra rangering.

Grunnleggende NTILE-syntaks

NTILE(4) på rader sortert etter en verdi gir kvartiler. Som alle vindusfunksjoner trenger den en OVER-klausul; ORDER BY inni denne avgjør hvilke rader som havner i de lave gruppene, og hvilke som havner i de høye.

Stigende sortering plasserer de minste verdiene i gruppe 1, mens synkende sortering snur dette.

SELECT
  customer_id,
  total_spend,
  NTILE(4) OVER (ORDER BY total_spend) AS spend_quartile
FROM customers;

Hvordan NTILE fordeler rader

Med 12 rader og NTILE(4) får hver gruppe nøyaktig 12 / 4 = 3 rader. Gruppe 1 = de 3 laveste verdiene, gruppe 4 = de 3 høyeste.

Hovedideen er at NTILE deler etter antall rader, ikke etter verdiintervaller. To grupper kan dekke svært forskjellige verdiintervaller så lenge de inneholder like mange rader.

Ujevn fordeling

Men hva om antallet rader ikke går opp? Med 10 rader og NTILE(4) blir 10 / 4 = 2 med rest 2. NTILE gir de tidligste gruppene de ekstra radene.

  • Gruppe 1: 3 rader
  • Gruppe 2: 3 rader
  • Gruppe 3: 2 rader
  • Gruppe 4: 2 rader

Gruppestørrelsene skiller seg dermed med høyst én, og de største gruppene kommer først. Denne nøyaktige regelen er en favorittdetalj i intervjuer.

NTILE ignorerer like verdier

Viktig fallgruve: NTILE sørger ikke for at like verdier havner i samme gruppe. Den fyller etter plassering, så to rader med identisk total_spend kan havne i forskjellige grupper utelukkende på grunn av radrekkefølgen.

Hvis virksomheten krever at like verdier skal tilhøre samme nivå, er NTILE feil verktøy; bruk en verdibasert tilnærming i stedet. Intervjuere legger bevisst inn denne fellen.

Desiler og persentiler

Antallet grupper er ganske enkelt tallet De oppgir. NTILE(10) gir desiler, og NTILE(100) gir persentilintervaller. Slik segmenterer analytikere brukere i ytelsesnivåer eller risikobånd.

Resultatet er båndnummeret, så en verdi i gruppe 9 fra NTILE(10) ligger i den nest høyeste desilen.

SELECT
  user_id,
  score,
  NTILE(10) OVER (ORDER BY score DESC) AS decile
FROM leaderboard;

Grupper per partisjon

Legg til PARTITION BY for å gruppere innenfor hver gruppe uavhengig, for eksempel forbrukskvartiler per region. Hver region starter på nytt med gruppe 1.

Dette besvarer spørsmål som «hvilke kunder ligger i øverste kvartil innenfor hver region?», der en region med lavt samlet forbruk likevel har sin egen gruppe 4.

SELECT
  region,
  customer_id,
  total_spend,
  NTILE(4) OVER (
    PARTITION BY region
    ORDER BY total_spend DESC
  ) AS regional_quartile
FROM customers;

Filtrering til et bestemt nivå

Det er ikke mulig å plassere NTILE(...) direkte i en WHERE-klausul; vindusfunksjoner beregnes etter WHERE. Pakk spørringen inn i en CTE eller underspørring, og filtrer deretter på gruppekollonnen.

Dette mønsteret, «gi meg forbrukerne i øverste kvartil», er den vanligste måten NTILE brukes på i et realistisk svar.

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 kontra verdibaserte persentiler

NTILE lager grupper med like mange rader. Hvis De i stedet trenger en ekte statistisk persentil (verdien ved 90-persentilen), kan De bruke PERCENTILE_CONT eller PERCENTILE_DISC.

  • NTILE(100): hvilken persentilgruppe en rad havner i, basert på rangeringen.
  • PERCENTILE_CONT(0.9): den faktiske verdien ved 90-persentilen.

Å kjenne forskjellen skiller et sikkert svar fra en gjetning.

Når ORDER BY er viktig

NTILE krever en ORDER BY inni OVER; gruppene er meningsløse uten en definert rekkefølge. Retningen bestemmer hvilken ende som blir gruppe 1.

Hvis like verdier gjør tildelingen tvetydig, og den nøyaktige gruppen for en rad på grensen er viktig, bør De legge til en sekundær sorteringskolonne for å få deterministiske og reproduserbare resultater.

Navngi grupper

Rå gruppenumre (1, 2, 3, 4) er sjelden det endelige leveranseformatet. Analytikere mapper dem vanligvis til forretningsetiketter som Lav, Middels, Høy og Topp med et CASE-uttrykk over NTILE-resultatet.

Beregn NTILE i en CTE, og oversett deretter tallet i den ytre spørringen. Dette holder vinduslogikken ryddig og gjør resultatet klart for presentasjon.

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;

Hurtigsjekk

Test regelen for ujevn fordeling.

Oppsummering

NTILE fordeler sorterte rader i grupper med like mange rader:

  • NTILE(n) merker rader med 1..n; NTILE(4) = kvartiler, NTILE(10) = desiler.
  • Den deler etter antall rader, ikke verdiintervall, og gir ekstra rader til de tidligste gruppene.
  • Den holder ikke like verdier sammen, og kan ikke brukes direkte i WHERE.
  • For en faktisk persentilverdi bør De bruke PERCENTILE_CONT.

Neste: hente grenseverdier med FIRST_VALUE, LAST_VALUE og rammegrenser.

Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «NTILE for inndeling i grupper» gratis?

Ja – hele teksten i «NTILE for inndeling i grupper» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Forberedelse til SQL-intervju-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.

Hva lærer jeg i «NTILE for inndeling i grupper»?

Del rader inn i kvartiler og persentilintervaller. Du øver på Forberedelse til SQL-intervju med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Forberedelse til SQL-intervju?

Ingen tidligere erfaring er nødvendig. Forberedelse til SQL-intervju på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «NTILE for inndeling i grupper»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Forberedelse til SQL-intervju-leksjonen?

Ja. Alle Forberedelse til SQL-intervju-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. LAG og LEAD for tilstøtende rader
  2. Endring fra periode til periode
  3. NTILE for inndeling i grupper
  4. FIRST_VALUE, LAST_VALUE og rammegrenser
← Tilbake til Forberedelse til SQL-intervju