Método general rápido para calcular percentiles.

9

Quiero encontrar n> 1 percentiles de una columna sin clasificar en PostgreSQL. Por ejemplo, los percentiles 20, 40, 60, 80 y 100.

Una solución obvia es contar y ordenar la columna y luego echar un vistazo, pero espero una mejor solución. ¿Algunas ideas?

PD: he encontrado una buena solución para MySQL pero no puedo traducirla a psql

Bob Jansen
fuente
2
¿Ha considerado las funciones de ventanas , por ejemplo, cume_dist ()?
Jack dice que intente topanswers.xyz
Postgres tiene PERCENT_RANK ()
Philᵀᴹ

Respuestas:

12

Se me ocurrió lo siguiente:

select cume, max(var) AS max_var
from (
   select var
        , ntile(5) over (order by var) as cume
   from table
   ) as tmp
group by cume
order by cume;

Selecciona el máximo de cada grupo que se divide usando ntile().

Bob Jansen
fuente