Вычисление 50-го процентиля в PostgreSQL - PullRequest
0 голосов
/ 24 мая 2018

У меня есть таблица, содержащая 100 тысяч строк следующего формата:

UserID - Ранг - Значение - Первичный ключ

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-й процентиль, сгруппированный по рангу, что означает, что мне нужно получить такие результаты:

Ранг ----- 50-й процентиль

00 ----------…

01 ----------…

02 ----------…

50-й процентиль каждого ранга - это та строка с первичным ключом, равная 0,5-кратному количеству строк каждого ранга (то есть 0,5-кратное число, где rank =01, 0,5 раза, где рейтинг = 02, и т. Д.).Однако имейте в виду, что после того, как я получу 50-й процентиль ранга 00, 50-й процентиль ранга 01 будет расположен на уровне 0,5 * (количество строк с рангом 01) + (количество строк с рангом 00) и т. Д.

Как мне это сделать в PostgreSQL ?Ваша помощь очень ценится.

1 Ответ

0 голосов
/ 24 мая 2018

Вы бы использовали percentile_disc() или percentile_cont():

select rank, percentile_cont(0.5) within group (order by value)
from t
group by rank;

Это предполагает, что вы действительно хотите медианное значение для каждой строки.Это самая разумная интерпретация, которую я могу дать по вашему вопросу.Конечно, вы можете изменить value на id для медианы id.

...