У меня есть таблица, содержащая 100 тысяч строк следующего формата:
Мне нужно вычислить 50-й процентиль, сгруппированный по рангу, что означает, что мне нужно получить такие результаты:
50-й процентиль каждого ранга - это строка с первичным ключом, равная 0,5-кратному количеству строк каждого ранга (т. Е. 0,5-кратное количество, если ранг = 01, 0,5-кратное количество, если ранг = 02,… и т. д.). Однако имейте в виду, что после того, как я получу 50-й процентиль ранга 00, 50-й процентиль ранга 01 будет располагаться в 0,5 * (количество строк с рангом 01) + (количество строк с рангом 00) и т. д.
Как мне это сделать в PostgreSQL? Ваша помощь очень ценится.


Вы бы использовали percentile_disc() или percentile_cont():
select rank, percentile_cont(0.5) within group (order by value)
from t
group by rank;
Это предполагает, что вам действительно нужно среднее значение для каждой строки. Это наиболее разумная интерпретация, которую я могу дать по вашему вопросу. Конечно, вы можете заменить value на id для среднего id.
@EliasMaalouf. . . Вот что делает этот запрос.
Привет, я отредактировал вопрос, не могли бы вы перепроверить новый вопрос и отредактировать ответ? Большое спасибо за Вашу помощь!