Szybka ogólna metoda obliczania percentyli

9

Chcę znaleźć n> 1 percentyle nieposortowanej kolumny w PostgreSQL. Na przykład 20, 40, 60, 80 i 100 percentyl.

Oczywistym rozwiązaniem jest policzyć i posortować kolumnę, a następnie rzucić okiem, ale mam nadzieję na lepsze rozwiązanie. Jakieś pomysły?

PS Znalazłem dobre rozwiązanie dla MySQL, ale nie mogę go przetłumaczyć na psql

Bob Jansen
źródło
2
Czy rozważałeś funkcje okienkowania , np. Cume_dist ()?
Jack mówi, że spróbuj topanswers.xyz
Postgres ma PERCENT_RANK ()
Philᵀᴹ

Odpowiedzi:

12

Wymyśliłem następujące rzeczy:

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;

Wybiera maksimum każdej grupy, która jest dzielona za pomocą ntile().

Bob Jansen
źródło