Как получить процентиль вне набора в PostgreSQL? - PullRequest
0 голосов
/ 19 июня 2019

Учитывая таблицы

product1_id | score
A  |   2 
B  |   3

и

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

как найти проценты из заданного значения баллов product1 среди баллов product2, используя PostgreSQL, чтобы получить ожидаемый результат:

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

1 Ответ

2 голосов
/ 19 июня 2019

Вот метод грубой силы:

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;
...