非常简单,假设我想总结一个组中的一个功能。
所以我通过窗口函数进行分区:
SELECT sum(NumberOfPlayers) over (partition by sport) as SumOfSport
太好了,这很好。现在..我想知道我刚刚赚取的所有款项中的这一总和。
一项具有9个球员的运动,例如,在五项运动中排名第二,其中排名第2位,将是第40个百分位数。
让我们开始简单..我想知道20个百分点在哪里。
... PERCENTILE_CONT(0.2) WITHIN GROUP (ORDER BY SumOfSport ASC) OVER (PARTITION BY NumberOfPlayers) AS AVGPV20
但这失败了。您不能在SELECT
中使用以前的窗口函数。
那么,我们如何在这里使用persitile_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
返回。