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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.