Изменить содержимое столбца на основе данных, представленных в других столбцах - PullRequest
0 голосов
/ 21 апреля 2020

Данные, которые у меня есть, выглядят ниже -

category_id  category  Type_1    Type_2    no_of_items
   123         cat_A      A       both         5
   123         cat_A      B       both         10
   123         cat_B      B       both         35
   123         cat_B      A       both         10
   123         cat_C      A       both         20

Я хочу получить следующий результат -

Когда category_id, то же самое, а Type_2 - «оба» (их много другие типы в Type_2) -

проверяют, есть ли в Type_1 запись с A и B, и если это так, тогда измените Type_1 на 'оба' , в противном случае сохраните его как и суммируйте no_of_items.

Если в Type_1 есть запись с A или B, тогда оставьте Type_1 без изменений.

Результат должен выглядеть следующим образом:

category_id  category  Type_1    Type_2    no_of_items
   123        cat_A    both       both         15
   123        cat_B    both       both         45
   123        cat_C      A        both         20

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Просто используйте агрегацию:

select category_id, category,
       (case when min(Type_1) <> max(Type_2) then 'Both' else min(type_1) end) as type_1,
       Type_2,
       sum(no_of_items) as no_of_items
from t
where type_2 = 'both'
group by category_id, category, Type_2;
1 голос
/ 21 апреля 2020

Если я правильно вас понял, следующий запрос будет работать с помощью sum(no_of_items). Вот демоверсия в postgres, но такое же решение должно работать для BigQuery.

select
    category_id,
    category,
    case when total = 2 then 'both' else Type_1 end as Type_1,
    Type_2,
    sum(no_of_items) as no_of_items
from
(select
    category_id,
    category,
    Type_1,
    Type_2,
    no_of_items,
    count(Type_1) over (partition by category) as total
from category
) t
group by
    category_id,
    category,
    case when total = 2 then 'both' else Type_1 end,
    Type_2
order by
    category

Вывод:

----------------------------------------------------
category_id category    type_1  type_2  no_of_items
----------------------------------------------------
    123     cat_A         both   both     15
    123     cat_B         both   both     45
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...