0Pricing
SQL Interview Prep · Lezione

NTILE per creare fasce

Dividere le righe in quartili e fasce percentili

NTILE per creare fasce è una lezione SQL Interview Prep gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Interview Prep include 4 lezioni in totale.

Quando servono bucket di uguale dimensione

I selezionatori chiedono: «Divida i clienti in quattro gruppi di spesa uguali» oppure «In quale decile si trova ogni riga?» Lo strumento da usare è NTILE.

NTILE(n) distribuisce le righe ordinate in n bucket nel modo più uniforme possibile e assegna a ogni riga il numero del proprio bucket, da 1 a n. In questa lezione vedrà come vengono suddivise le righe, come vengono gestiti i conteggi non divisibili e in cosa NTILE differisce dalle funzioni di ranking.

Sintassi di base di NTILE

Applicare NTILE(4) a righe ordinate per un valore produce i quartili. Come tutte le funzioni finestra, richiede una clausola OVER; l'ORDER BY interno decide quali righe finiscono nei bucket inferiori e quali in quelli superiori.

Un ordinamento crescente inserisce i valori più piccoli nel bucket 1; un ordinamento decrescente inverte il risultato.

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

Come NTILE distribuisce le righe

Con 12 righe e NTILE(4), ogni bucket riceve esattamente 12 / 4 = 3 righe. Il bucket 1 contiene i 3 valori più bassi, mentre il bucket 4 contiene i 3 più alti.

L'idea fondamentale è che NTILE suddivide in base al numero di righe, non agli intervalli di valori. Due bucket possono coprire intervalli di valori molto diversi, purché contengano lo stesso numero di righe.

Divisione non uniforme

Che cosa succede quando il numero di righe non è divisibile? Con 10 righe e NTILE(4), 10 / 4 = 2 con resto 2. NTILE assegna le righe aggiuntive ai primi bucket.

  • Bucket 1: 3 righe
  • Bucket 2: 3 righe
  • Bucket 3: 2 righe
  • Bucket 4: 2 righe

Le dimensioni dei bucket differiscono quindi al massimo di una riga e quelli più grandi vengono prima. Questa regola precisa è un dettaglio molto apprezzato nei colloqui.

NTILE ignora i valori ex aequo

Attenzione a un dettaglio fondamentale: NTILE non mantiene i valori uguali nello stesso bucket. Riempie i bucket in base alla posizione, quindi due righe con lo stesso total_spend possono finire in bucket diversi soltanto in base all'ordine delle righe.

Se l'attività richiede che valori uguali condividano la stessa fascia, NTILE è lo strumento sbagliato; serve invece un approccio basato sui valori. I selezionatori inseriscono volutamente questa trappola.

Decili e percentili

Il numero di bucket è semplicemente il numero passato alla funzione. NTILE(10) produce i decili, mentre NTILE(100) produce fasce percentili. È così che gli analisti suddividono gli utenti in fasce di prestazioni o di rischio.

Il risultato è il numero della fascia, quindi un valore nel bucket 9 di NTILE(10) si trova nel secondo decile più alto.

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

Bucket per partizione

Aggiunga PARTITION BY per creare bucket indipendenti all'interno di ogni gruppo, ad esempio i quartili della spesa per regione. Ogni regione riparte dal bucket 1.

In questo modo può rispondere a domande come «Quali sono i clienti nel quartile superiore all'interno di ogni regione?», anche quando una regione ha una spesa complessiva bassa ma dispone comunque del proprio bucket 4.

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

Filtrare una fascia specifica

Non può inserire direttamente NTILE(...) in una clausola WHERE: le funzioni finestra vengono calcolate dopo WHERE. Racchiuda la query in una CTE o una sottoquery, quindi applichi il filtro alla colonna del bucket.

Questo schema, «mostrami il quartile superiore dei clienti che spendono di più», è il modo più comune in cui NTILE compare nelle risposte reali.

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 e percentili basati sui valori

NTILE crea bucket con lo stesso numero di righe. Se invece Le serve un vero percentile statistico, cioè il valore al 90º percentile, usi PERCENTILE_CONT o PERCENTILE_DISC.

  • NTILE(100): la fascia percentile in cui rientra una riga, in base alla posizione nella graduatoria.
  • PERCENTILE_CONT(0.9): il valore effettivo al 90º percentile.

Conoscere la differenza distingue una risposta sicura da una semplice supposizione.

Quando ORDER BY è importante

NTILE richiede un ORDER BY all'interno di OVER: senza un ordine definito, i bucket non hanno significato. La direzione stabilisce quale estremità corrisponde al bucket 1.

Se i valori ex aequo rendono l'assegnazione ambigua e il bucket esatto di una riga al limite è importante, aggiunga una colonna per risolvere i pari merito nell'ordinamento e ottenere risultati deterministici e riproducibili.

Assegnare nomi ai bucket

I semplici numeri dei bucket (1, 2, 3, 4) raramente sono il risultato finale. Di solito gli analisti li associano a etichette aziendali come Basso, Medio, Alto e Top con un'espressione CASE applicata al risultato di NTILE.

Calcoli NTILE in una CTE, quindi trasformi il numero nella query esterna. In questo modo la logica della finestra rimane pulita e l'output è pronto per essere presentato.

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;

Verifica rapida

Verifichi la regola della distribuzione non uniforme.

Riepilogo

NTILE distribuisce le righe ordinate in bucket con lo stesso numero di elementi:

  • NTILE(n) assegna alle righe le etichette da 1 a n; NTILE(4) produce i quartili, NTILE(10) i decili.
  • Suddivide in base al numero di righe, non all'intervallo dei valori, e assegna le righe aggiuntive ai primi bucket.
  • Non mantiene insieme i valori ex aequo e non può essere usato direttamente in WHERE.
  • Per ottenere il valore di un vero percentile, usi PERCENTILE_CONT.

Prossimo argomento: recuperare i valori ai limiti con FIRST_VALUE, LAST_VALUE e i limiti del frame.

Domande Frequenti

La lezione «NTILE per creare fasce» è gratuita?

Sì — il testo completo di «NTILE per creare fasce» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Interview Prep, passa a CoddyKit PRO. Il corso SQL Interview Prep include 4 lezioni in totale.

Cosa imparerò in «NTILE per creare fasce»?

Dividere le righe in quartili e fasce percentili Eserciti SQL Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Interview Prep?

Non è richiesta alcuna esperienza precedente. SQL Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «NTILE per creare fasce»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Interview Prep?

Sì. Ogni lezione SQL Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. LAG e LEAD per le righe adiacenti
  2. Variazione tra periodi
  3. NTILE per creare fasce
  4. FIRST_VALUE, LAST_VALUE e limiti del frame
← Torna a SQL Interview Prep