Contenido de esta guía
Respuesta rápida
NTILE(N) numera cada fila con un grupo entre 1 y N después de ordenar la ventana. Si el número de filas no se divide exactamente entre N, algunos grupos tienen una fila más; los grupos grandes se asignan primero según el orden.
NTILE(4) OVER (
ORDER BY puntuacion DESC, id
)El ORDER BY define quién entra antes en los grupos. PARTITION BY es opcional y reinicia la división dentro de cada partición.
Modelo mental: reparte filas, no calcula percentiles exactos
Piensa en una fila ordenada de personas y en N cajas. NTILE recorre ese orden y distribuye las filas para que las cajas tengan tamaños tan parecidos como sea posible. El resultado es una etiqueta de grupo, no un porcentaje matemático del valor.
«Cuartil» es una etiqueta práctica, no una frontera estadística exacta. Si existen muchos valores empatados, NTILE(4) puede separar filas con el mismo valor en grupos distintos porque su objetivo principal es equilibrar la cantidad de filas.
Ejemplo: terciles de precio
La base educativa tiene nueve productos. Al usar NTILE(3), cada grupo recibe exactamente tres filas. Añadimos id como desempate para que el orden sea reproducible.
SELECT
id,
nombre,
precio,
NTILE(3) OVER (
ORDER BY precio DESC, id
) AS tercio_precio
FROM productos
ORDER BY precio DESC, id;| id | nombre | precio | tercio_precio |
|---|---|---|---|
| 4 | Portátil Pro | 999,00 | 1 |
| 7 | Monitor 27 | 249,00 | 1 |
| 3 | Monitor 24 | 179,00 | 1 |
| 8 | Disco SSD | 89,00 | 2 |
| 5 | Auriculares | 69,90 | 2 |
| 10 | Altavoz | 54,00 | 2 |
| 2 | Teclado | 49,50 | 3 |
| 1 | Ratón | 24,90 | 3 |
| 9 | Cable USB-C | 12,00 | 3 |
Reinicia los grupos con PARTITION BY
Si quieres clasificar dentro de cada categoría, departamento o cliente, añade PARTITION BY. Cada partición recibe sus propios grupos 1…N.
SELECT
categoria,
nombre,
precio,
NTILE(2) OVER (
PARTITION BY categoria
ORDER BY precio DESC, id
) AS mitad_en_categoria
FROM productos
ORDER BY categoria, mitad_en_categoria, precio DESC;Una categoría con una sola fila seguirá recibiendo el grupo 1. Si hay menos filas que grupos solicitados, algunos números de grupo no aparecen porque no existen filas que asignarles.
NTILE, RANK y ROW_NUMBER responden preguntas distintas
| Función | Pregunta | Efecto de empates |
|---|---|---|
ROW_NUMBER() | ¿Qué posición secuencial ocupa cada fila? | Cada fila recibe un número distinto. |
RANK() | ¿Qué puesto ocupa este valor respecto a los demás? | Los pares comparten puesto y aparecen huecos. |
NTILE(N) | ¿En cuál de N grupos equilibrados cae esta fila? | Puede separar empates para equilibrar tamaños. |
Errores frecuentes
Interpretar el grupo 1 como «el 25 % superior» sin revisar los datos
Con NTILE(4) el primer grupo contiene aproximadamente una cuarta parte de las filas, pero no necesariamente todos los valores por encima de un umbral estadístico. Los empates y el tamaño total importan.
Omitir un desempate cuando el resultado debe ser reproducible
Si el ORDER BY deja empates sin resolver, el motor puede asignar el orden relativo de esas filas de manera no garantizada. Añade una clave estable cuando el reparto concreto importe.
Compatibilidad entre motores
PostgreSQL, SQLite, MySQL 8.4 y SQL Server documentan NTILE como función de ventana. Todos requieren un OVER; SQL Server documenta explícitamente el ORDER BY dentro de esa ventana. Los tipos devueltos y detalles del optimizador pueden variar, pero la idea de repartir cada partición en grupos casi iguales es compartida.
Práctica: divide los productos en cuatro grupos
Crea cuatro grupos de precio
Devuelve id, nombre, precio y un cuartil calculado con NTILE(4). Ordena de mayor a menor precio y usa id para desempatar.
NTILE es 4.OVER (...).ORDER BY exterior para leer el resultado con facilidad.Solución razonada
SELECT
id,
nombre,
precio,
NTILE(4) OVER (
ORDER BY precio DESC, id
) AS cuartil
FROM productos
ORDER BY precio DESC, id;Con nueve productos, SQLite distribuye los tamaños 3, 2, 2 y 2: el primer grupo recibe una fila más porque los grupos grandes aparecen primero.
Qué debes recordar
NTILE(N)asigna a cada fila un grupo entre 1 y N.- El reparto busca tamaños lo más equilibrados posible.
- El
ORDER BYdefine quién entra primero; añade desempate si importa la reproducibilidad. - No confundas grupos de filas con percentiles exactos del valor.
Conceptos relacionados
Fuentes técnicas consultadas
Las referencias oficiales se usaron para verificar el reparto de grupos, el papel del orden y la compatibilidad.