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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.