如何合并两个带不同WHERE条件的SQL查询并进行运算?
合并入库出库统计并计算最终库存的SQL实现
我有一张名为transaction的事务表,原本用两个SQL分别统计入库和出库数据:
SELECT ITEM_ID, SUM(QUANTITY) AS `IN` FROM `transaction` WHERE TYPE = 'IN' GROUP BY ITEM_ID; SELECT ITEM_ID, SUM(QUANTITY) AS `OUT` FROM `transaction` WHERE TYPE = 'OUT' GROUP BY ITEM_ID;
希望合并这两个查询,得到包含ITEM_ID、入库量(Item In)、出库量(Item Out)、最终库存(Final Qty = 入库量 - 出库量)的结果。
解决方案:使用条件聚合实现
可以通过条件聚合(CASE语句结合SUM函数)直接完成需求,无需拆分查询再合并,一次表扫描即可完成统计,效率更高。完整SQL语句如下:
SELECT ITEM_ID, SUM(CASE WHEN TYPE = 'IN' THEN QUANTITY ELSE 0 END) AS `Item In`, SUM(CASE WHEN TYPE = 'OUT' THEN QUANTITY ELSE 0 END) AS `Item Out`, SUM(CASE WHEN TYPE = 'IN' THEN QUANTITY ELSE -QUANTITY END) AS `Final Qty` FROM `transaction` GROUP BY ITEM_ID;
细节说明
CASE WHEN会根据事务类型筛选数据:仅对TYPE = 'IN'的记录累加QUANTITY作为入库量,TYPE = 'OUT'的累加作为出库量;未匹配的类型用0填充,避免缺失记录- 表名
transaction和关键字类别名(如IN/OUT)用反引号(`)包裹,避免SQL语法冲突 - 如果需要直接用已计算的入库出库量计算最终库存,部分数据库(如MySQL)支持如下写法(兼容性稍差):
SELECT ITEM_ID, SUM(CASE WHEN TYPE = 'IN' THEN QUANTITY ELSE 0 END) AS `Item In`, SUM(CASE WHEN TYPE = 'OUT' THEN QUANTITY ELSE 0 END) AS `Item Out`, `Item In` - `Item Out` AS `Final Qty` FROM `transaction` GROUP BY ITEM_ID;
内容的提问来源于stack exchange,提问作者party
相关产品推荐
相关产品推荐

