Суммируйте набор значений на основе столбца и сверните строки на основе условий в bigquery - PullRequest
0 голосов
/ 27 мая 2020

У меня есть запрос на преобразование таблицы в Bigquery. У меня есть таблица, в которой мне нужно суммировать определенные строки на основе условий c в двух столбцах.

enter image description here

Мне нужно свернуть строки, где У меня Occ = S1 и MT = Engli sh для уникальной комбинации кода, UR и gen. Значения процентов должны быть суммированы в одну строку следующим образом -

enter image description here

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT code, UR, gen, Occ, MT, SUM(pct) AS pct
FROM (
  SELECT * REPLACE(IF(collapse, 'S1', Occ) AS Occ, IF(collapse, 'English', MT) AS MT)
  FROM (
    SELECT *, 
      COUNTIF(Occ = 'S1' AND MT = 'English') OVER(PARTITION BY code, UR, gen) > 0 AS collapse
    FROM `project.dataset.table`
  )
)
GROUP BY code, UR, gen, Occ, MT   

если применить к образцу данных из вашего вопроса - результат будет

Row code    UR      gen Occ MT      pct  
1   128     Rural   F   D2  Ao      0.77     
2   128     Rural   F   D3  Ao      0.38     
3   128     Rural   M   D4  Ao      0.89     
4   128     Rural   M   D5  Ao      0.02     
5   128     Urban   F   S1  English 0.63     
6   128     Urban   M   S1  English 0.63     
0 голосов
/ 27 мая 2020

Если я правильно понял, можно использовать агрегацию с некоторыми условными логами c:

select code, ur, gen,
       coalesce((case when cnt_s1 is null then occ end), 'S1') as occ,
       mt,
       sum(pct) as pct
from (select t.*,
             countif( occ = 'S1' ) over (partition by code, ur, gen, mt) as cnt_s1
      from t
     ) t
group by code, ur, gen, occ, mt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...