BigQuery — агрегирование строк с использованием стандартного SQL

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

+------------+----------------+-------------+
|    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?


person SubZeno    schedule 25.04.2020    source источник


Ответы (1)


Вы можете использовать выражение 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;
person Gordon Linoff    schedule 25.04.2020