NTILE para crear grupos
Divida las filas en cuartiles y bandas percentiles
NTILE para crear grupos es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.
Cuando necesita segmentos del mismo tamaño
Los entrevistadores preguntan: «Divida a los clientes en cuatro grupos de gasto del mismo tamaño» o «¿En qué decil se encuentra cada fila?» La herramienta es NTILE.
NTILE(n) distribuye las filas ordenadas en n segmentos lo más uniformemente posible y etiqueta cada fila con el número de su segmento, del 1 al n. En esta lección verá cómo realiza la división, cómo gestiona las cantidades desiguales y en qué se diferencia de las funciones de clasificación.
Sintaxis básica de NTILE
Aplicar NTILE(4) a filas ordenadas por un valor produce cuartiles. Como todas las funciones de ventana, necesita una cláusula OVER; el ORDER BY incluido en ella decide qué filas terminan en los segmentos bajos y cuáles en los altos.
Ordenar de forma ascendente coloca los valores más pequeños en el segmento 1; ordenar de forma descendente invierte el resultado.
SELECT
customer_id,
total_spend,
NTILE(4) OVER (ORDER BY total_spend) AS spend_quartile
FROM customers;Cómo distribuye NTILE las filas
Con 12 filas y NTILE(4), cada segmento recibe exactamente 12 / 4 = 3 filas. El segmento 1 contiene los 3 valores más bajos y el segmento 4, los 3 más altos.
La idea clave es que NTILE divide por cantidad de filas, no por intervalos de valores. Dos segmentos pueden abarcar intervalos de valores muy diferentes siempre que contengan la misma cantidad de filas.
División desigual
¿Qué ocurre si las filas no se dividen de forma exacta? Con 10 filas y NTILE(4), 10 / 4 = 2, con un resto de 2. NTILE asigna las filas adicionales a los primeros segmentos.
- Segmento 1: 3 filas
- Segmento 2: 3 filas
- Segmento 3: 2 filas
- Segmento 4: 2 filas
Por tanto, el tamaño de los segmentos difiere como máximo en una fila y los segmentos más grandes aparecen primero. Esta regla exacta es un detalle muy habitual en las entrevistas.
NTILE ignora los empates entre valores
Una trampa importante: NTILE no mantiene los valores iguales en el mismo segmento. Completa los segmentos según la posición, por lo que dos filas con el mismo total_spend pueden terminar en segmentos diferentes únicamente por el orden de las filas.
Si el negocio exige que los valores iguales compartan nivel, NTILE no es la herramienta adecuada; necesita un enfoque basado en valores. Los entrevistadores colocan esta trampa deliberadamente.
Deciles y percentiles
La cantidad de segmentos es simplemente el número que se proporciona. NTILE(10) produce deciles y NTILE(100), bandas percentiles. Así es como los analistas dividen a los usuarios en niveles de rendimiento o bandas de riesgo.
El resultado es el número de la banda, por lo que un valor en el segmento 9 de NTILE(10) se encuentra en el segundo decil más alto.
SELECT
user_id,
score,
NTILE(10) OVER (ORDER BY score DESC) AS decile
FROM leaderboard;Segmentos por partición
Añada PARTITION BY para dividir en segmentos de forma independiente dentro de cada grupo; por ejemplo, para obtener cuartiles de gasto por región. Cada región vuelve a empezar en el segmento 1.
Esto responde a preguntas como «¿Cuáles son los clientes del cuartil superior dentro de cada región?», donde una región con un gasto general bajo sigue teniendo su propio segmento 4.
SELECT
region,
customer_id,
total_spend,
NTILE(4) OVER (
PARTITION BY region
ORDER BY total_spend DESC
) AS regional_quartile
FROM customers;Filtrar un nivel específico
No puede colocar NTILE(...) directamente en una cláusula WHERE; las funciones de ventana se calculan después de WHERE. Encapsule la consulta en una CTE o subconsulta y, después, filtre por la columna del segmento.
Este patrón, «muéstreme el cuartil superior de los clientes que más gastan», es la forma más habitual en que NTILE aparece en una solución real.
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 frente a percentiles basados en valores
NTILE crea segmentos con la misma cantidad de filas. Si, en cambio, necesita un percentil estadístico real (el valor situado en el percentil 90), utilice PERCENTILE_CONT o PERCENTILE_DISC.
- NTILE(100): indica en qué banda percentil se encuentra una fila, según su posición en la clasificación.
- PERCENTILE_CONT(0.9): devuelve el valor real correspondiente al percentil 90.
Conocer la diferencia distingue una respuesta segura de una simple suposición.
Cuando ORDER BY importa
NTILE requiere un ORDER BY dentro de OVER; los segmentos no tienen sentido sin un orden definido. La dirección establece qué extremo corresponde al segmento 1.
Si los empates hacen ambigua la asignación y es importante conocer el segmento exacto de una fila en el límite, añada una columna de desempate al orden para obtener resultados deterministas y reproducibles.
Etiquetar los segmentos con nombres
Los números de segmento sin más (1, 2, 3, 4) rara vez son el resultado final. Normalmente, los analistas los asignan a etiquetas de negocio como Bajo, Medio, Alto y Superior mediante una expresión CASE sobre el resultado de NTILE.
Calcule NTILE en una CTE y, después, traduzca el número en la consulta externa. Esto mantiene limpia la lógica de ventana y deja el resultado listo para su presentación.
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;Comprobación rápida
Ponga a prueba la regla de distribución desigual.
Repaso
NTILE distribuye las filas ordenadas en segmentos con la misma cantidad de filas:
NTILE(n)etiqueta las filas del 1 al n;NTILE(4)representa cuartiles yNTILE(10), deciles.- Divide por cantidad de filas, no por intervalos de valores, y asigna las filas adicionales a los primeros segmentos.
- No mantiene juntos los valores empatados y no puede utilizarse directamente en
WHERE. - Para obtener el valor de un percentil real, utilice
PERCENTILE_CONT.
A continuación: obtener valores de los extremos con FIRST_VALUE, LAST_VALUE y los límites del marco.
Preguntas frecuentes
¿La lección «NTILE para crear grupos» es gratis?
Sí — el texto completo de «NTILE para crear grupos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.
¿Qué aprenderé en «NTILE para crear grupos»?
Divida las filas en cuartiles y bandas percentiles Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Interview Prep?
No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «NTILE para crear grupos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?
Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- LAG y LEAD para filas adyacentes
- Cambio entre periodos
- NTILE para crear grupos
- FIRST_VALUE, LAST_VALUE y límites del marco