MySql-如何通过连接三个表和过滤器来获得特定列的总和

MySql-如何通过连接三个表和过滤器来获得特定列的总和,mysql,Mysql,有三张桌子 库存-其中包含库存信息 订单-包含订单的存储信息 OrderParts-包含与订单关联的部件 库存表 订单表 订单零件表 需要生成低于预期的报告 查询试图获得上述结果 SELECT inventory.partNumber, inventory.storeId, SUM(parts.quantity) as orderedQuantity, inventory.availableQuantity FROM (SELECT *, SU

有三张桌子

  • 库存-其中包含库存信息
  • 订单-包含订单的存储信息
  • OrderParts-包含与订单关联的部件
  • 库存表

    订单表

    订单零件表

    需要生成低于预期的报告

    查询试图获得上述结果

    SELECT 
        inventory.partNumber, inventory.storeId, SUM(parts.quantity) as orderedQuantity, 
        inventory.availableQuantity
        FROM
            (SELECT *, SUM(availableQuantity) AS availQty
    FROM
        inventory AS inventory
    GROUP BY storeId , partNumber) AS inventory
        LEFT JOIN
    (SELECT 
        *
    FROM
        order
    GROUP BY storeId) AS order ON order.storeId = inventory.storeId
        LEFT JOIN
    (SELECT 
        *
    FROM
        orderParts) AS parts ON inventory.partNumber = parts.partNumbe    
    where inventory.partNumber in ("A1234", "B1234");
    GROUP BY order.storeId , parts.partNumber
    
    正在获取订购数量的null


    请告诉我如何获得预期的累计订购数量。提前感谢。

    一个相对简单的方法是
    union all
    和聚合:

    select storeid, partnumber,
           sum(availableqty) as availableqty,
           sum(orderedqty) as orderedqty
    from (select storeid, partnumber, availableqty, 0 as orderedqty
          from inventory
          union all
          select o.storeid, op.partnumber, 0, op.quantity
          from orderparts op join
               orders o
               on op.ordernumber = o.ordernumber
         ) sp
    group by storeid, partnumber;
    

    您的问题没有明确描述过滤器,但您可以在子查询或外部查询中添加过滤器。

    仅标记您使用的数据库。