【问题标题】:MYSQL SUM qty with JoinMYSQL SUM 数量与加入
【发布时间】:2023-03-05 17:54:01
【问题描述】:

我的 SQL 查询有问题。当我使用多个 JOIN 时,结果是错误的。

SELECT name, stock,SUM(order_items.qty),
SUM(shipping_items.qty) FROM shipping_items

JOIN mnm_products 
ON mnm_products.id = shipping_items.product_id

JOIN order_items
ON mnm_products.id = order_items.product_id

GROUP BY mnm_products.id

当我只使用时

SELECT name, stock,
SUM(shipping_items.qty) FROM shipping_items

JOIN mnm_products 
ON mnm_products.id = shipping_items.product_id
GROUP BY mnm_products.id

没错。但是当我使用 2 个连接时。两者的结果是一样的。 有人可以帮我吗?

【问题讨论】:

  • 您的附加连接正在添加附加行——大概每个项目一个。这会乘以聚合的行数。一种解决方案是使用有效的查询预先聚合结果。
  • 一般的 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须要么标识一个分组列,要么是一个集合函数的参数!
  • 好的,你能给我举个例子吗?它应该按产品 ID 分组
  • 标准的方法是把选定的非参数列放到set函数中,然后把它们放在group by子句中。在这种情况下GROUP BY name, stock.

标签: mysql sql join left-join right-join


【解决方案1】:

您可能最好使用相关子查询:

select p.*,
       (select sum(si.qty)
        from shipping_items si
        where si.product_id = p.id
       ) as shipping_items,
       (select sum(oi.qty)
        from order_items oi
        where oi.product_id = p.id
       ) as order_items
from mnm_products p;

【讨论】:

  • 好的,谢谢。是否可以添加项目以获得结果?像 SUM(order_items + shipping_items) 总计
  • @WolfgangMüller 。 . .可能最简单的方法是使用子查询。
猜你喜欢
  • 1970-01-01
  • 2015-04-26
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多