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

MySQL技术需求:两列相乘后按product_id计算出入记录差值

正确计算按product_id分组的IN/OUT差值方案

嘿,我来帮你搞定这个库存计算的问题!从你的描述来看,核心需求是按product_id分组,先计算每条记录的prod_size * prod_amount,再分别统计IN类型的总乘积和OUT(你写的UT应该是笔误吧?如果确实是UT记得替换成对应值)的总乘积,最后算出两者的差值。之前结果不对大概率是没正确区分in_out类型或者聚合方式有误,下面给你靠谱的实现方案:

核心SQL实现

假设你的表名叫inventory(如果不是,替换成你的实际表名),可以用CASE WHEN配合SUM()来分别统计IN和OUT的总乘积,再计算差值:

SELECT
    product_id,
    -- 计算IN类型的总乘积
    SUM(CASE WHEN in_out = 'IN' THEN prod_size * prod_amount ELSE 0 END) AS total_in,
    -- 计算OUT类型的总乘积
    SUM(CASE WHEN in_out = 'OUT' THEN prod_size * prod_amount ELSE 0 END) AS total_out,
    -- 直接得到IN减OUT的差值
    SUM(CASE WHEN in_out = 'IN' THEN prod_size * prod_amount ELSE - (prod_size * prod_amount) END) AS net_difference
FROM
    inventory
GROUP BY
    product_id;

关键细节说明

  • 精准区分in_out类型:通过CASE WHEN筛选对应类型的记录,确保只有目标类型的乘积会被计入对应总和,避免交叉计算错误。
  • 处理数值兼容问题:如果prod_size或prod_amount是字符串类型,记得先转成数值(比如CAST(prod_size AS DECIMAL) * CAST(prod_amount AS DECIMAL));如果存在NULL值,用COALESCE(prod_size, 0) * COALESCE(prod_amount, 0)替换,防止NULL导致乘积失效影响总和。
  • 适配实际标识值:如果你的出库类型实际标识是UT,把SQL里的'OUT'改成'UT'就行。

示例验证

比如你的示例数据是这样的:

Idproduct_idin_outprod_sizeprod_amount
1101IN25
2101OUT23
3102IN34
4102OUT31

用上面的SQL执行后会得到:

product_idtotal_intotal_outnet_difference
1011064
1021239

这个结果就是正确的IN与OUT的差值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:07:08