Быстрый общий метод для расчета процентилей

9

Я хочу найти n> 1 процентиль несортированного столбца в PostgreSQL. Например, 20-й, 40-й, 60-й, 80-й и 100-й процентили.

Очевидное решение - подсчитать и отсортировать столбец, а затем посмотреть, но я надеюсь на лучшее решение. Любые идеи?

PS Я нашел хорошее решение для MySQL, но не могу перевести его на psql

Боб Янсен
источник
2
Рассматривали ли вы оконные функции , например cume_dist ()?
Джек говорит, попробуйте topanswers.xyz
У Postgres есть PERCENT_RANK ()
Philᵀᴹ

Ответы:

12

Я придумал следующее:

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;

Он выбирает максимум каждой группы, которая делится с помощью ntile().

Боб Янсен
источник