【问题标题】:SQL: How to perform PERCENTILE_CONT of group sum among groups?SQL:如何在组之间执行组总和的 PERCENTILE_CONT?
【发布时间】:2019-06-27 01:26:10
【问题描述】:

非常简单,假设我想对组内的某个特征的总和进行求和。

所以我通过一个窗口函数进行分区:

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 而不必进行连接呢?

【问题讨论】:

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


    【解决方案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 回来更简单。

    【讨论】:

    • 当我第一次运行它时,它只给出了在组总和中的百分位数。但是每组只有一个 SUM。所以百分位数是总和..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多