快速通用的百分位数计算方法


9

我想在PostgreSQL中找到未排序列的n> 1个百分位数。例如20、40、60、80和100%。

一个显而易见的解决方案是对列进行计数和排序,然后进行查看,但我希望有一个更好的解决方案。有任何想法吗?

PS我已经找到了一个很好的MySQL 解决方案,但无法将其转换为psql


2
您是否考虑过窗口函数,例如cume_dist()?
杰克说试试topanswers.xyz 2012年

Postgres具有PERCENT_RANK()
Philᵀᴹ2012年

Answers:


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.