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 Normandy
和 Upper 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;
考虑这个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 Normandy
和 Upper 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;