当前位置: 首页 > 知识库问答 >
问题:

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

阴高寒
2023-03-14

有三张桌子

  1. 库存-包含库存信息
  2. 订单-包含订单的存储信息
  3. 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

获取已订购数量为空

请告诉我如何得到预期的累计订货量。提前道谢。

共有1个答案

农波涛
2023-03-14

一种比较简单的方法是联合所有和聚合:

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;

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

 类似资料:
  • 如何在使用某些条件筛选每个表之后连接两个表,并在获得筛选结果后连接两个结果。 已尝试代码,但显示语法错误

  • 我有两个独立的表,唯一的方法是通过列“fname”和“lname”来精确匹配这两个表。这是一个尝试从on表中获取电话分机的方法,该方法基于来自另一个表的fname和lname。 这是表“Exentions”(有电话分机号码): id fname lname location位置扩展 这是表“目录”(它有位置): id ext fname lname fullName位置 我想按目录.位置查询并显示

  • 我正在使用PhpStorm 2018.3.4,Docker,MySQL和Ubuntu。我试图配置MySQL与Docker容器不成功。 首先,我尝试了以下配置: 它给了我这个错误: 然后,我试了一下: 这个给了我另一个错误。 我错过什么了吗?有没有其他地方我必须配置一些东西? 输出: 这里: 对于命令,这里是描述的链接:https://pastebin.com/9LmeAkc8 下面是docker-

  • 问题内容: 我正在做熊猫分析。 我的表有700万行* 30列。单元格值的范围从-1到3随机。现在,我想根据列的值过滤掉行。 我了解如何根据多个条件进行选择,写下条件并通过“&”“ |”组合。 但是我有30列要过滤,并按相同的值过滤。例如,需要选择最后12列的值等于-1 上面的代码给了我一个布尔值。我需要实际的数据框。 这里的逻辑是“或”,表示如果任何列的值为-1,则需要选择该行。另外,很高兴知道我

  • 问题内容: 我想做类似的事情: Python的标准库中是否有类似行为? 我知道在这里自己动手很容易,但是我正在寻找一种更标准的方法。 问题答案: 您可以使用filter方法: 或列表理解: 要查找单个元素,可以尝试: 尽管如果没有匹配项将引发异常,因此您可能希望将其包装在try / catch中。方括号()使之成为生成器表达式,而不是列表理解。 就我个人而言,尽管我只是使用常规的过滤器/理解并采用