Referencia de funciones

NTILE

Divide las filas de una partición de la ventana en el número indicado de grupos de tamaño parecido y devuelve el número de grupo de la fila.

MySQL 8.4
NTILE(number_of_groups)
number_of_groups
Número de grupos; entero positivo
INT

Valor devuelto

Número entero (BIGINT UNSIGNED) de 1 a number_of_groups

Ejemplos

Tres grupos por fecha de nacimiento

MySQL 8.4
SELECT member_name,
	birthday,
	NTILE(3) OVER (
		ORDER BY birthday
	) AS age_group
FROM FamilyMembers;
member_namebirthdayage_group
Headley Quincey1960-05-131
Ernest Forrest1961-09-111
Flavia Quincey1963-02-161
Constance Forrest1968-09-062
Andie Quincey1983-06-052
Lela Quincey1985-06-072
Annie Quincey1988-04-103
Wednesday Addams2005-01-133

Límites de los cuartiles por importe del pedido

MySQL 8.4
SELECT bucket,
	MIN(total_amount) AS min_amount,
	MAX(total_amount) AS max_amount,
	COUNT(*) AS orders
FROM (
		SELECT total_amount,
			NTILE(4) OVER (
				ORDER BY total_amount
			) AS bucket
		FROM orders
	) AS t
GROUP BY bucket
ORDER BY bucket;
bucketmin_amountmax_amountorders
11.995.97114
25.989.97114
39.9820.97114
421.2999.96114

Detalles

Si las filas no se pueden repartir por igual, los primeros grupos reciben una fila más: 8 filas en 3 grupos se reparten como 3, 3 y 2. Si hay más grupos que filas, cada fila va a su propio grupo. Las filas con el mismo valor de ORDER BY pueden acabar en grupos distintos, y sin ORDER BY las filas se reparten entre los grupos de forma arbitraria.

Véase también