MySQL5.7对分组计算的剩余库存列求和时报组函数无效错误如何解决
错误原因
报错的核心原因是 MySQL不支持在同一查询层级嵌套使用聚合函数。
你当前的查询在按a.item_numer分组的同一层级中,试图在SUM()内部嵌套使用MAX()、SUM()两个聚合函数,而聚合函数的计算依赖分组后的结果集,同一层级的GROUP BY只能完成一次聚合计算,无法同时完成「按商品分组计算单个商品剩余库存」和「对所有商品剩余值求和」两个聚合逻辑,因此触发分组函数非法使用的报错。
解决方案
把原来可以正常执行的、按商品分组计算单个剩余库存的SQL作为内层子查询,在外层对查询出来的所有remaining值做求和即可,适配MySQL 5.7.34的正确SQL如下:
SELECT SUM(remaining) as total_remaining FROM ( SELECT MAX(`a`.`Start_Balance_Qty`) - SUM(IFNULL(`b`.`QTY`, 0)) as remaining FROM `items` `a` LEFT JOIN `details` `b` ON `a`.`item_numer` = `b`.`PARTNO` AND `b`.`deliverystatusid` = '6' GROUP BY `a`.`item_numer` ) as goods_remaining
内容的提问来源于stack exchange,提问作者user17112781
相关产品推荐
相关产品推荐

