Выбор строк с указанием c текста для подсчета и суммирования - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно определить процент заданных c значений по годам.

Набор данных имеет следующие значения:

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

Есть и другие годы, но для примера I выбрано только 2012. Для каждого года я хотел бы определить процентное соотношение как:

  • Количество значений, имеющих points слово в тексте

Разделенное на значения, начиная с с - 20

То же самое для случая с 30. Ожидаемый результат для -20 в 2012 году:

(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

Но я получил ошибка Упорядоченные аналитические функции не могут быть вложенными.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Я думаю, вам нужна условная агрегация:

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;
0 голосов
/ 17 июня 2020

Вы можете вложить агрегат только в функцию 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
...