sql—选择具有特定文本的行进行计数和求和

uklbhaso  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(321)

我需要每年确定特定值的百分比。
数据集的值如下:

Year   Col                         Value 

2012  -20 p,                        12
2012  -20 points, d             20
2012  -20 points, by           24
2012  -20 p, new                32
2012  -30 p,                      1256
2012  -30 points, d             32
2012  -30 points, by           42
2012  -30 p, new               164

还有其他年份,但我只选了2012年作为例子。每年,我想确定的百分比如下:
具有 points 文本中的单词
除以以开头的值 - 20 30的情况也一样。2012年-20年的预期产量:

(20+24)/(12+20+24+32)

我试过以下方法

Select year,
        Col,
        Count(0) as Value
        , 100*count(0)/sum(count(case when Col like ‘-20%points%’ then 1 end) over (partition by year, substr(Col, 1,2))) as pct_20
        /* Same for 40 poin

    ts */
    From table1

Where /* conditions */
Group by 1,2

但我得到的错误排序分析函数不能嵌套。

oipij1gg

oipij1gg1#

我认为您需要条件聚合:

select year, substr(col, 1, 2),
       sum(case when col like '%points%' then value end) / sum(value)
from t
group by 1, 2;

根据您的评论:

select year, substr(col, 1, 2),
       sum(case when col like '%points%' then 1.0 end) / count(*)
from t
group by 1, 2;
zzoitvuj

zzoitvuj2#

只能在olap函数中嵌套聚合,反之亦然:

, 100*count(*)/NULLIF(sum(count(case when Col like ‘-20%points%’ then 1 end))
                          over (partition by year, substr(Col, 1,2)), 0) as pct_20

相关问题