如何将单表主SELECT查询的某列替换为另一表的SELECT查询结果?
替换查询字段为另一表的分组求和结果
修正后的目标SQL实现
原需求是将TableA查询中的COL3替换为TableB中按COL1分组后COL2的求和值,这里需要先修正子查询的语法错误(GROUP BY后不能用AND,且标量子查询无需ORDER BY),以下是两种可行的实现方式:
方式1:关联子查询
直接在SELECT列表中嵌入关联子查询,确保和TableA的COL1关联:
SELECT COL1, COL2, (SELECT SUM(COL2) FROM TableB WHERE TableB.COL1 = TableA.COL1 GROUP BY COL1) AS COL3 FROM TableA;
方式2:左连接(推荐,性能更优)
先对TableB做分组求和,再和TableA左连接,避免TableA中存在COL1在TableB中无对应数据时丢失记录:
SELECT a.COL1, a.COL2, b.sum_col2 AS COL3 FROM TableA a LEFT JOIN ( SELECT COL1, SUM(COL2) AS sum_col2 FROM TableB GROUP BY COL1 ) b ON a.COL1 = b.COL1;
说明
- 两种方式都能实现需求,左连接方式在数据量较大时通常比关联子查询性能更好
- 子查询中
GROUP BY COL1可以保证每个COL1对应唯一的求和结果,避免返回多行导致报错
内容的提问来源于stack exchange,提问作者Media 99
相关产品推荐
相关产品推荐

