我有一个包含以下格式的10万行的表:
我需要计算第50个百分位数,按Rank排序,这意味着我需要获得这样的结果:
每个等级的第50个百分位是具有主键的行等于每个等级的行数的0.5倍(即,等级= 01的0.5倍计数,等级= 02的0.5倍计数,等等)。但是,请记住,在得到Rank 00的第50个百分位数后,Rank 01的第50个百分位将位于0.5 *(排名为01的行数)+(排名为00的行数),依此类推。
我如何在 PostgreSQL 中执行此操作?非常感谢您的帮助。
答案 0 :(得分:1)
您可以使用percentile_disc()
or percentile_cont()
:
select rank, percentile_cont(0.5) within group (order by value)
from t
group by rank;
这假设您实际上想要每行的中值。这是我可以对你的问题做出的最明智的解释。当然,您可以将value
更改为id
作为中位数id
。