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

如何通过LEFT JOIN汇总多行某列值并计算库存剩余量?

解决方案:将多行转移数量汇总为单行计算剩余库存

要实现把同一库存ID对应的所有转移数量求和,再计算剩余库存并显示为单行,核心是先对transfers表的转移量按stock_id聚合,再与stocks表关联。以下是两种高效实现方式:

方法一:先聚合转移数据再关联(推荐)

先通过子查询统计每个库存的总转移量,再和库存表左连接,能减少连接的数据量,性能更优:

SELECT 
    s.id,
    s.quantity,
    COALESCE(t.total_transfer, 0) AS tquantity,
    s.quantity - COALESCE(t.total_transfer, 0) AS remaining
FROM stocks s
LEFT JOIN (
    SELECT stock_id, SUM(quantity) AS total_transfer
    FROM transfers
    GROUP BY stock_id
) t ON t.stock_id = s.id
WHERE s.quantity - COALESCE(t.total_transfer, 0) > 0 
   OR t.total_transfer IS NULL;
  • 用COALESCE处理没有转移记录的情况,避免NULL参与运算导致结果异常
  • 提前聚合转移数据,减少后续连接的行数,适合数据量较大的场景

方法二:直接关联后聚合

如果数据量较小,也可以直接左连接后通过GROUP BY聚合计算:

SELECT 
    s.id,
    s.quantity,
    SUM(t.quantity) AS tquantity,
    s.quantity - COALESCE(SUM(t.quantity), 0) AS remaining
FROM stocks s
LEFT JOIN transfers t ON t.stock_id = s.id
GROUP BY s.id, s.quantity
HAVING s.quantity - COALESCE(SUM(t.quantity), 0) > 0 
    OR SUM(t.quantity) IS NULL;
  • 直接关联后按库存ID和库存数量分组,用SUM计算总转移量
  • HAVING子句替代WHERE,因为需要过滤聚合后的结果

内容的提问来源于stack exchange,提问作者Belli Pier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:48:24