# quantile ❇️

La función quantile es una función de ventana que devuelve el ranking de cada fila normalizado entre 1 y "N". Es decir, divide el conjunto de registros en "N" grupos con el mismo número de registros cada uno y los numera de 1 a "N".

Tiene un parámetro de entrada para especificar el número de cuantiles. Por ejemplo, quantile(3 order by ventas) creará tres grupos numerados como 1,2 y 3.

Requiere la cláusula ORDER BY en la partición OVER.

Se puede usar tanto la sintaxis OVER del SQL estándar como la sintaxis compacta propia de Crono.

# Ejemplo

La siguiente consulta clasifica las tiendas en 3 grupos según sus ventas. Las ventas del grupo 1 incluirá el tercio de tiendas con mayores ventas.

select 
  lb_tiendas.nombre tienda,
  sum(unidades) ventas,
  quantile(3 order by ventas desc) percentil
from dbo.lb_ventas
inner join lb_tiendas using id_tienda
group by all

La consulta SQL generada es:

SELECT
  lb_tiendas.nombre AS tienda,
  sum(unidades) AS ventas,
  ceiling(3.0*rank() OVER (ORDER BY sum(unidades))/count(*) OVER ()) AS percentil
FROM dbo.lb_ventas
INNER JOIN lb_tiendas ON (lb_ventas.id_tienda=lb_tiendas.id_tienda)
GROUP BY lb_tiendas.nombre

# Comentarios

Esta función es similar a rank, percentile, decile y quartile``. La funciónrank` devuelve la posición ordinal de cada registro, mientras que las otras funciones clasifican los registros en grupos de distintos tamaños (100, 10, 4 o n).