Вычисление 50-го процентиля в PostgreSQL

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

Идентификатор пользователя - Ранг - Значение - Первичный ключ

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-кратное количество, если ранг = 01, 0,5-кратное количество, если ранг = 02,… и т. д.). Однако имейте в виду, что после того, как я получу 50-й процентиль ранга 00, 50-й процентиль ранга 01 будет располагаться в 0,5 * (количество строк с рангом 01) + (количество строк с рангом 00) и т. д.

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
2 406
1

Ответы 1

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

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

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

Привет, я отредактировал вопрос, не могли бы вы перепроверить новый вопрос и отредактировать ответ? Большое спасибо за Вашу помощь!

Elias Maalouf 24.05.2018 21:02

@EliasMaalouf. . . Вот что делает этот запрос.

Gordon Linoff 24.05.2018 21:20

Другие вопросы по теме