Ir al contenido

percentile

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

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.

La siguiente consulta devuelve el percentil de ventas en que se encuentra cada libro. Los libros con un percentil de 95 o superior están en el grupo del 5% de libros más vendidos.

select
lb_libros.titulo libro,
sum(unidades) ventas,
percentile(order by ventas) percentil
from dbo.lb_ventas
inner join lb_libros using id_libro
group by all

La consulta SQL generada es:

SELECT
lb_libros.titulo AS libro,
sum(unidades) AS ventas,
ceiling(100.0*rank() OVER (ORDER BY sum(unidades))/count(*) OVER ()) AS percentil
FROM dbo.lb_ventas
INNER JOIN lb_libros ON (lb_ventas.id_libro=lb_libros.id_libro)
GROUP BY lb_libros.titulo

Esta función es similar a rank, decile, quartile y quantile. La función rank 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).