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
返回更简单。
非常简单,假设我想对一个组中的一个特征的总数求和。
所以我对 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
.
那么我们如何在此处使用 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
返回更简单。