BigQuery - 使用标准 SQL 聚合行

BigQuery - Aggregate rows using standard SQL

考虑这个table

+------------+----------------+-------------+
|    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 NormandyUpper Normandy 的行聚合为 Normandy,并根据 date 列对 population 求和。

预期结果为:

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

此聚合的结果将用于创建新视图。

如何使用标准 SQL 在 BigQuery 中执行此操作?

您可以使用 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;

这匹配任何以 "Normandy" 结尾的内容。当然,您可以使用 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;