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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.