SQL: Как выполнить PERCENTILE_CONT групповой суммы среди групп? - PullRequest
0 голосов
/ 27 июня 2019

Очень просто, скажем, я хочу суммировать общее количество элементов в группе.

Итак, я разбиваю оконную функцию:

SELECT sum(NumberOfPlayers) over (partition by sport) as SumOfSport

Отлично, это хорошо,Теперь ... Я хочу знать процентиль этой суммы среди всех сумм, которые я только что сделал.

Спорт с 9 игроками, например, среди пяти видов спорта, где он занимает второе место из пяти, будет в 40-м процентиле.

Давайте начнем с простого ... Я хочу знать, где находится 20-й процентиль.

... PERCENTILE_CONT(0.2) WITHIN GROUP (ORDER BY SumOfSport ASC) OVER (PARTITION BY NumberOfPlayers) AS AVGPV20

Но это не удается.Вы не можете использовать предыдущую оконную функцию в SELECT.

Так как же здесь использовать PERCENTILE_CONT без необходимости объединения?

1 Ответ

1 голос
/ 27 июня 2019

Использовать подзапрос:

select sport, sum(NumberOfPlayers),
       percentile_cont(0.2) within group (order by   sum(NumberOfPlayers) asc) over () AS avgpv20
from t
group by sport;

Затем join этот результат возвращается к исходному запросу.

Попытка сделать percentile_cont() без агрегирования данных будет довольно сложной задачей, поскольку отдельные значения реплицируются. Проще просто агрегировать и join вернуться обратно.

...