如何在BigQuery中按多列分组:日期、活动日期及区域场景
分组聚合SQL代码验证与修正
原始数据表结构与数据
| Date | Campaign Date | Region | total spend | total clicks |
|---|---|---|---|---|
| 08/09/2022 | 06/09/2022 | a | 30 | 20 |
| 07/09/2022 | 07/09/2022 | a | 20 | 28 |
| 08/09/2022 | 06/09/2022 | b | 38 | 35 |
| 07/09/2022 | 07/09/2022 | b | 25 | 26 |
期望分组结果表
| Date | Campaign_Date | Region | total_spend | total clicks |
|---|---|---|---|---|
| 07/09/2022 | 06/09/2022 | a | 30 | 20 |
| 07/09/2022 | 06/09/2022 | b | 38 | 35 |
| 08/09/2022 | 07/09/2022 | a | 20 | 28 |
| 08/09/2022 | 07/09/2022 | b | 25 | 26 |
当前SQL代码问题分析
用户提供的SQL代码如下:
SELECT Date, Campaign_Date, Region, SUM(spend) AS total_spend, SUM(clicks) AS total_clicks FROM df GROUP BY Date, Campaign_Date, Region
这段代码无法满足需求,存在以下关键问题:
- 列名不匹配:原始表的指标列是
total spend和total clicks,但代码中用了spend和clicks,数据库会因找不到对应列报错。 - 带空格列名未处理:原始表的
Campaign Date列名含空格,代码中写成Campaign_Date会被识别为不存在的列,需用引号(如"Campaign Date")或方括号(如[Campaign Date])包裹(格式取决于所用数据库)。 - 缺少排序逻辑:期望结果按
Date升序排列,但当前代码无ORDER BY子句,返回结果顺序无法保证与期望一致。
修正后的SQL代码
SELECT Date, "Campaign Date" AS Campaign_Date, Region, SUM("total spend") AS total_spend, SUM("total clicks") AS total_clicks FROM df GROUP BY Date, "Campaign Date", Region ORDER BY Date, "Campaign Date", Region;
修正说明
- 用引号包裹带空格的列名,确保数据库正确识别原始表列
- 聚合原始表实际存在的
total spend和total clicks列,得到正确聚合结果 - 添加
ORDER BY子句,使结果按Date、Campaign Date、Region排序,匹配期望输出顺序
内容的提问来源于stack exchange,提问作者user20350073
相关产品推荐
相关产品推荐

