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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.