如何编写正确SQL查询获取同part_id的qty总和?关联表查询问题
修复你的SQL查询以获取按零件分组的库存总量
嘿,你的查询没法正常跑主要是两个小问题,我来帮你修正并说明原因:
- 字段拼写错误:你写的
stock.statu应该是stock.status,和stock表定义的字段名不一致,数据库找不到这个字段肯定报错。 - 缺少分组子句:用
SUM()这类聚合函数时,必须告诉数据库按什么维度分组计算总和。另外,stock.idstock不该出现在SELECT里——同一个part_id可能对应多条库存记录,每条的idstock都不一样,分组后数据库不知道该返回哪一个,所以得去掉它。
修正后的正确查询
SELECT `parts`.`id` AS part_id, `parts`.`partName`, SUM(`stock`.`qty`) AS total_qty FROM `stock` INNER JOIN `parts` ON `parts`.`id` = `stock`.`part_id` WHERE `stock`.`status` = '1' GROUP BY `parts`.`id`, `parts`.`partName`
简单解释:
- 我们按
parts.id(也就是stock表的part_id)和parts.partName分组,保证每个零件对应唯一的统计结果。 - 给总和字段起了
total_qty的别名,让结果更直观。 - 修正了
status的拼写错误,匹配表结构。
如果你确实需要展示每条库存的idstock,那得换个思路——因为同一个零件对应多条库存,你可以用GROUP_CONCAT()把所有相关的idstock合并成一个列表,示例如下:
SELECT `parts`.`id` AS part_id, `parts`.`partName`, GROUP_CONCAT(`stock`.`idstock`) AS related_stock_ids, SUM(`stock`.`qty`) AS total_qty FROM `stock` INNER JOIN `parts` ON `parts`.`id` = `stock`.`part_id` WHERE `stock`.`status` = '1' GROUP BY `parts`.`id`, `parts`.`partName`
这样就能同时得到每个零件的总库存数量,以及对应的所有库存记录ID了。
内容的提问来源于stack exchange,提问作者Udayanga Amarasinghe
相关产品推荐
相关产品推荐

