Bigquery — строки в столбец

#sql #google-cloud-platform #count #google-bigquery #pivot

#sql #google-облачная платформа #количество #google-bigquery #сводная

Вопрос:

Я пытаюсь преобразовать строки в столбец (своего рода свод)

Текущая таблица (сгенерированная из CTE)

 with cte as (select date(start_time) as date, type, count(*) as total 
from table
where start_time >='2020-09-09'
group by 1,2
order by 1)
  

введите описание изображения здесь

Мой ожидаемый результат:

введите описание изображения здесь

Я попробовал этот запрос, но он не сработал

 with cte as (select date(start_time) as date, type, count(*) as total 
from table
where start_time >='2020-09-09'
group by 1,2
order by 1),
c1 as(
select date,total as C1 from cte where type='c1') ,
c2 as(
select date, total as C2 from cte where type='c2'),
c3 as(
select date,total as C3 from cte where type='c3')
select cte.date,c1.C1,c2.C2,c3.C3  from cte join c1 on cte.date=c1.date join c2 on cte.date=c2.date
join c3 on cte.date=c3.date join ext on cte.date=ext.date
  

Это сработало, но каждая строка была добавлена 3 раза.

Ответ №1:

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

 select 
    date(start_time) start_date, 
    countif(cat = 'c1') c1, 
    countif(cat = 'c2') c2, 
    countif(cat = 'c3') c3
from mytable
where start_time >='2020-09-09'
group by date(start_time)