NTILE() Función de Windows en SQL Server

NTILE es una función que permite distribuir los registros en un número de grupos determinado (percentil, cuartil o alguna otra subdivisión). 

Sintaxis

NTILE (integer_expression) OVER ([ <partition_by_clause> ] < order_by_clause >)

Ejemplo.
Se crea una consulta especificando que se desea agrupar en cuartiles en función al campo order_amount. El resultado nos mostrará cuántas órdenes quedan en cada cuartil.

Primero se crea una tabla y se ingresan registros ficticios para el ejemplo.

CREATE TABLE [dbo].[Orders] ( order_id INT, order_date DATE, customer_name VARCHAR(250), city VARCHAR(100), order_amount MONEY ) INSERT INTO [dbo].[Orders] SELECT '5001','2021-05-01','Denton Swanson','Monterrey',5000 UNION ALL SELECT '5002','2021-05-02','Benjamin Mccullough','Guadalajara',10000 UNION ALL SELECT '5003','2021-05-03','Tad Singleton','Querétaro',2500 UNION ALL SELECT '5004','2021-05-04','Garth Hodge','Monterrey',7500 UNION ALL SELECT '5005','2021-05-05','Sonya Brennan','Querétaro',3500 UNION ALL SELECT '5006','2021-05-06','Neville Serrano','Monterrey',12500 UNION ALL SELECT '5007','2021-05-10','Sebastian Lambert','Guadalajara',7500 UNION ALL SELECT '5008','2021-05-11','Samantha Sandoval','Guadalajara',1000 UNION ALL SELECT '5009','2021-05-20','Joshua Villarreal','Querétaro',500 UNION ALL SELECT '5010','2021-05-25','Sonya Brennan','Monterrey',250

A continuación se ejecuta la consulta que incluye la función NTILE().

SELECT order_id,order_date,customer_name,city, order_amount, NTILE(4) OVER (ORDER BY order_amount) [row_number] FROM [dbo].[Orders]

En este ejemplo, con un total de 10 registros, se especifican cuatro grupos resultantes.

El total de registros por cada grupo sería de 2.5 (10/4), pero el número de registros debe ser un número entero, por lo que en este caso se asignan 3 registros para los primeros dos grupos y 2 registros para los dos grupos restantes.

Deja un comentario