如何在SQL/BigQuery中按ID合并Name并聚合Count字段?
解决方案:按ID聚合并处理NULL Name与求和Count
原始数据表
| ID | Name | Count |
|---|---|---|
| 1 | John | 1 |
| 1 | NULL | 10 |
| 2 | Sam | 11 |
| 3 | Mike | 13 |
| 3 | NULL | 15 |
| 4 | Tom | 80 |
| 5 | Null | 90 |
| 5 | Clare | 10 |
| 6 | NULL | 10 |
期望输出表
| ID | Name | Count |
|---|---|---|
| 1 | John | 11 |
| 2 | Sam | 11 |
| 3 | Mike | 28 |
| 4 | Tom | 80 |
| 5 | Clare | 100 |
| 6 | NULL | 10 |
BigQuery SQL实现
SELECT ID, COALESCE(MAX(Name), NULL) AS Name, SUM(Count) AS Count FROM `your-project.your-dataset.your-table` GROUP BY ID ORDER BY ID;
逻辑说明
- 分组聚合:按
ID分组,将同一ID的所有记录合并处理。 - Name字段处理:
MAX(Name)会自动忽略NULL值,提取分组内唯一的非NULL Name;如果分组内所有Name都是NULL,MAX(Name)返回NULL,COALESCE会保留这个NULL,满足“无有效Name则保留NULL”的要求。 - Count求和:
SUM(Count)对同一ID下的所有Count值累加,不管对应Name是否为NULL,符合需求中“同ID下Count字段求和”的规则。 - 排序:最后按
ID升序排列,与期望输出的顺序一致。
内容的提问来源于stack exchange,提问作者Shan
相关产品推荐
相关产品推荐

