SQL:如何在组之间执行组总和的PERCENTILE_CONT?

时间:2019-06-27 01:26:10

标签: sql window-functions partition percentile percentile-cont

非常简单,假设我要对组内的全部功能求和。

所以我在一个窗口函数上进行了分区:

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 个答案:

答案 0 :(得分:1)

使用子查询:

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重新加入即可。