首页 > 解决方案 > 如何在 PostgreSQL 中获取超出设置的百分位数?

问题描述

给定一张桌子

product1_id | score
A  |   2 
B  |   3

product2_id | score
W  |   1
X  |   2
Y  |   3
Z  |   4

如何使用 PostgreSQL 在 product2 分数中找到 product1 分数的超出设置百分位数以获得预期输出:

product1_id | score | out_of_set_percentile
A  |   2  |  50
B  |   3  |  75.

在 python 中,解决此问题的一种方法是合并表并应用scipy.percentileofscore

from scipy import stats
stats.percentileofscore([1, 2, 3, 4], 3)  # 75.0,

但我想要一种在 PostgreSQL 中本地执行此操作的方法

标签: pythonsqlpostgresqlscipypercentile

解决方案


这是一种蛮力方法:

select t1.product_id, t1.score,
       avg( (t2.score <= t1.score)::int ) as ratio
from t1 cross join
     t2
group by t1.product_id, t1.score;

推荐阅读