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


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().

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.