SQL:如何进行组间组和PERCENTILE_CONT?

SQL: How to perform PERCENTILE_CONT of group sum among groups?

非常简单,假设我想对一个组中的一个特征的总数求和。

所以我对 window 函数进行分区:

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.

中使用以前的 window 函数

那么我们如何在此处使用 PERCENTILE_CONT 而无需进行连接?

使用子查询:

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 返回更简单。