Metode umum cepat untuk menghitung persentil

9

Saya ingin mencari n> 1 persentil dari kolom yang tidak disortir di PostgreSQL. Misalnya persentil ke-20, ke-40, ke-60, ke-80, dan ke-100.

Solusi yang jelas adalah menghitung dan mengurutkan kolom dan kemudian melihat tetapi saya berharap untuk solusi yang lebih baik. Ada ide?

PS Saya telah menemukan solusi yang bagus untuk MySQL tetapi tidak dapat menerjemahkannya ke psql

Bob Jansen
sumber
2
Sudahkah Anda mempertimbangkan fungsi windowing , mis. Cume_dist ()?
Jack bilang coba topanswers.xyz
Postgres memiliki PERCENT_RANK ()
Philᵀᴹ

Jawaban:

12

Saya datang dengan yang berikut:

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;

Ini memilih maksimum setiap grup yang dibagi menggunakan ntile().

Bob Jansen
sumber