我有一个Postgres表,大约有500 k行,其中一列叫做 score,值的范围是0-1,数据不是正态分布的。
假设我有一个观测值0.25,我想找出它在 score 列的分布中的位置,这有时被称为百分比等级。
例如,值0.25位于第40百分位数。这意味着值0.25大于表中观测值的40%。
我知道我可以用下面的公式来计算频率分布,但是当我想要的只是一个百分位数的时候,这感觉有点过头了。
select k, percentile_disc(k) within group (order by mytable.score)
from mytable, generate_series(0.01, 1, 0.01) as k
group by k
1条答案
按热度按时间3xiyfsfu1#
听起来像是要使用假设集聚合函数**
percent_rank()
**:本手册:
计算假设行的相对排名,即(
rank
-1)/(总行数-1)。因此,值的范围为0到1(含)。