BigQuery - агрегирование строк с использованием стандарта SQL - PullRequest
0 голосов
/ 25 апреля 2020

Рассмотрим эту таблицу

+------------+----------------+-------------+
|    date    |   region_name  |  population |
+------------+----------------+-------------+
| 2000-02-11 | Lower Normandy |   1.000.000 |
+------------+----------------+-------------+
| 2000-02-11 | Upper Normandy |   1.100.000 |
+------------+----------------+-------------+
| 2020-04-25 | Lower Normandy |   1.800.000 |
+------------+----------------+-------------+
| 2020-04-25 | Upper Normandy |   1.900.000 |
+------------+----------------+-------------+

Я хотел бы объединить строки для Lower Normandy и Upper Normandy как Normandy и, согласно столбцу date, суммировать population.

Ожидаемый результат будет:

+------------+----------------+-------------+
|    date    |   region_name  |  population |
+------------+----------------+-------------+
| 2000-02-11 |       Normandy |   2.100.000 |
+------------+----------------+-------------+
| 2020-04-25 |       Normandy |   3.700.000 |
+------------+----------------+-------------+

Результат этой агрегации будет затем использоваться для создания нового представления.

Как это сделать в BigQuery с помощью стандарт SQL?

1 Ответ

0 голосов
/ 25 апреля 2020

Вы можете использовать выражение case, чтобы изменить имя:

select date,
       (case when region_name like '%Normandy' then 'Normandy' else region_name end) as region_name,
       sum(population) as population
from t
group by 1, 2;

Это соответствует всему, что оканчивается на «Нормандия». Конечно, вы можете использовать region_name in ('Upper Normandy', 'Lower Normany') для большей точности (и большего набора текста).

Или, если вам нужны только эти четыре строки, вы можете просто присвоить region_name:

select date, 'Normandy' as region_name, sum(population) as population
from t
where region_name like '%Normandy'
group by date;
...