Método geral rápido para calcular percentis

9

Quero encontrar n> 1 percentis de uma coluna não classificada no PostgreSQL. Por exemplo, os percentis 20, 40, 60, 80 e 100.

Uma solução óbvia é contar e classificar a coluna e, em seguida, dar uma olhada, mas espero uma solução melhor. Alguma ideia?

PS: Encontrei uma boa solução para MySQL, mas não consigo traduzi-la para psql

Bob Jansen
fonte
2
Você já considerou funções de janelas , por exemplo, cume_dist ()?
Jack diz que tente topanswers.xyz 26/04/12
O Postgres tem PERCENT_RANK ()
Philᵀᴹ

Respostas:

12

Eu vim com o seguinte:

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;

Ele seleciona o máximo de cada grupo que é dividido usando ntile().

Bob Jansen
fonte