# pctrank ❇️

La función pctrank es una función de ventana que devuelve el ranking de cada fila normalizado entre 0 y 1.

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 devuelve el 40% de las tiendas con mayor venta.

select 
  lb_tiendas.nombre tienda,
  sum(unidades) ventas,
  pctrank(order by ventas desc) rank
from dbo.lb_ventas
inner join lb_tiendas using id_tienda
group by all
qualify rank<0.4

La consulta SQL generada es:

SELECT *
FROM (
    SELECT
      lb_tiendas.nombre AS tienda,
      sum(unidades) AS ventas,
      1.0*rank() OVER (ORDER BY sum(unidades) DESC)/count(*) OVER () AS rank
    FROM dbo.lb_ventas
    INNER JOIN lb_tiendas ON (lb_ventas.id_tienda=lb_tiendas.id_tienda)
    GROUP BY lb_tiendas.nombre
  ) a
WHERE rank<0.4

# Comentarios

Esta función es similar a rank y percentile. La función rank devuelve la posición ordinal de cada registro, percentile la normaliza entre 0 y 100, y pctrankla normaliza entre 0 y 1.