计算PostgreSQL中的第50个百分点

时间:2018-05-24 18:35:27

标签: sql database postgresql oop percentile

我有一个包含以下格式的10万行的表:

UserID - Rank - Value - Primary Key

1236 ----- 00 ---- 233.4 -------- 1

1377 ----- 00 ---- 150.6 -------- 2

1287 ----- 01 ---- 167 ---------- 3

1343 ----- 01 ---- 134.5 -------- 4

1284 ----- 01 ---- 155.2 -------- 5

1386 ----- 02 ---- 302 ----------- 6

1372 ----- 02 ---- 108.3 7

我需要计算第50个百分位数,按Rank排序,这意味着我需要获得这样的结果:

排名-----第50百分位数

00 ---------- ......

01 ---------- ......

02 ---------- ......

每个等级的第50个百分位是具有主键的行等于每个等级的行数的0.5倍(即,等级= 01的0.5倍计数,等级= 02的0.5倍计数,等等)。但是,请记住,在得到Rank 00的第50个百分位数后,Rank 01的第50个百分位将位于0.5 *(排名为01的行数)+(排名为00的行数),依此类推。

我如何在 PostgreSQL 中执行此操作?非常感谢您的帮助。

1 个答案:

答案 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