You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个带不同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:50:28