SQL:如何在组之间执行组和的百分比控制?
非常简单,假设我想求一个组中某个特性的总和 所以我在一个窗口函数上划分:SQL:如何在组之间执行组和的百分比控制?,sql,window-functions,partition,percentile,percentile-cont,Sql,Window Functions,Partition,Percentile,Percentile Cont,非常简单,假设我想求一个组中某个特性的总和 所以我在一个窗口函数上划分: SELECT sum(NumberOfPlayers) over (partition by sport) as SumOfSport 太好了,这很好。现在我想知道在我刚才做的所有总数中,那个总数的百分位数 例如,在五项运动中,有9名运动员的运动在五项运动中排名第二,将处于第40百分位 让我们从简单的开始。。我想知道第20百分位在哪里 。。。组内百分比(0.2)(按SumOfSport ASC排序)超过(按玩家数量划分)
SELECT sum(NumberOfPlayers) over (partition by sport) as SumOfSport
太好了,这很好。现在我想知道在我刚才做的所有总数中,那个总数的百分位数
例如,在五项运动中,有9名运动员的运动在五项运动中排名第二,将处于第40百分位
让我们从简单的开始。。我想知道第20百分位在哪里
。。。组内百分比(0.2)(按SumOfSport ASC排序)超过(按玩家数量划分)为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()
)将是一项非常具有挑战性的工作,因为单个值是重复的。只需聚合并加入
就更简单了。当我第一次运行此程序时,它只给出组总和中的百分比。但每个小组只有一笔钱。所以百分位数就是总和。。