MySQL双库存系统视图创建:求和计算困惑求助
解决MySQL双库存模式下的库存统计求和问题
嘿,我懂你现在的困扰!刚接触MySQL就搞双库存模式的改造,确实容易在聚合统计上踩坑。你原来用左连接子查询的写法,最大的问题是会产生笛卡尔积——当同一个SKU在不同门店有多条库存记录时,连接后会把这些行重复组合,导致SUM计算时把同一个库存数量加了好多次,结果自然就不对了。
正确的做法:用条件聚合替代子查询连接
不用搞复杂的左连接,直接在SUM里加条件判断,就能精准统计每个门店的库存,而且写法简洁高效:
CREATE VIEW stock_summary AS SELECT `sku`, SUM(CASE WHEN `idStock` = 1 THEN `stockQty` ELSE 0 END) AS `store1`, SUM(CASE WHEN `idStock` = 2 THEN `stockQty` ELSE 0 END) AS `store2`, SUM(`stockQty`) AS `total` FROM `stockList` GROUP BY `sku`;
为什么这个写法能解决问题?
GROUP BY sku会把同一个SKU的所有库存记录归为一组,避免重复行的干扰。CASE WHEN会判断每条记录属于哪个门店:如果是门店1的库存,就把stockQty加入求和,否则加0;门店2同理。这样每个门店的库存只会被计算一次,不会因为连接导致重复累加。- 总库存
total直接对所有stockQty求和,逻辑简单直接,和门店统计互不影响。
扩展性提示
如果以后要新增更多门店,只需要在SELECT里多加一行SUM(CASE WHEN idStock = N THEN stockQty ELSE 0 END) AS storeN就行,维护起来特别方便,比写一堆子查询连接省心多了!
内容的提问来源于stack exchange,提问作者Valladão
相关产品推荐
相关产品推荐

