Швидкий загальний метод обчислення відсотків


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.