SQL如何实现带指定条件的列复制 现有SUM聚合查询调整
调整方案
你可以用条件聚合实现这个需求,同时我顺便修正了你原SQL里的两个语法错误:1. stock_batches表未声明别名sb导致关联报错;2. 列定义末尾多余的逗号。
修改后的SQL如下:
SELECT SUM(sm.quantity) AS col1, SUM(CASE WHEN sd.transferrable = true THEN sm.quantity ELSE 0 END) AS col2 FROM stock_batches AS sb INNER JOIN stock_distributions AS sd ON sd.stock_batch_id = sb.id INNER JOIN stock_movements AS sm ON sm.stock_distribution_id = sd.id
逻辑说明
- col1保持原有逻辑,统计所有关联匹配到的库存移动数量总和
- col2通过
CASE WHEN做行级过滤,只有当关联的库存分发记录transferrable字段为true时,才将对应移动数量计入总和,否则不计入
如果使用的数据库支持IF函数(比如MySQL、Spark SQL等),col2的计算还可以简写为:
SUM(IF(sd.transferrable = true, sm.quantity, 0)) AS col2
内容的提问来源于stack exchange,提问作者patrick_star
相关产品推荐
相关产品推荐

