请求编写BigQuery查询实现两表合并及分数差值计算
解决方案
以下是满足需求的BigQuery SQL语句:
-- 保留Table B的所有原始记录 SELECT ID, Name, Games, Score FROM `你的项目名.你的数据集名.TableB` UNION ALL -- 生成每个ID的差值记录(Games为null) SELECT a.ID, a.Name, NULL AS Games, a.Score - COALESCE(b.total_score, 0) AS Score FROM `你的项目名.你的数据集名.TableA` a LEFT JOIN ( -- 预计算Table B中每个ID的Score总和 SELECT ID, SUM(Score) AS total_score FROM `你的项目名.你的数据集名.TableB` GROUP BY ID ) b ON a.ID = b.ID
关键说明
- 原始记录保留:直接查询Table B的所有行,确保原有游戏记录全部包含在结果中。
- 差值计算逻辑:
- 子查询先统计Table B中每个ID的总分,避免重复计算;
- 用
LEFT JOIN关联Table A和汇总结果,保证Table A中所有ID都能生成对应差值行,哪怕该ID在Table B中无记录(此时差值就是Table A的原始Score); COALESCE函数处理Table B无对应ID的情况,防止出现NULL值,默认用0替代。
- 重复ID处理:针对Table A中存在重复ID(如12-1710有两条Sonia的记录)的情况,会为每条Table A的行单独生成对应的差值记录,匹配原始表结构逻辑。
示例验证
以ID 12-2112为例:
- Table B中该ID的Score总和:
10291+2271+3211+1625=17398 - Table A中该ID的Score:
23844 - 差值计算结果:
23844-17398=6446,与你给出的示例输出完全一致。
内容的提问来源于stack exchange,提问作者Herman K
相关产品推荐
相关产品推荐

