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()
)将是一项非常具有挑战性的工作,因为单个值是重复的。只需聚合并
加入
就更简单了。

当我第一次运行此程序时,它只给出组总和中的百分比。但每个小组只有一笔钱。所以百分位数就是总和。。