【问题标题】:2 layer SQL join2层SQL连接
【发布时间】:2022-06-11 00:27:51
【问题描述】:

我对 sql 很陌生。

我有以下数据库架构:

Customers
    CustomerID number
    Name string
    Address string
    Country string
OrderDetails
    OrderDetailID number
    OrderID number
    ProductID number
    Quantity number
Orders
    OrderID number
    CustomerID number
    OrderDate string
    OrderValue string
Products
    ProductID number
    ProductName string
    Price number

我需要获取所有订购特定产品名称 =“油”的客户 ID 和数量

到目前为止我可以得到数量

select OrderDetails.Quantity
FROM Products
INNER JOIN OrderDetails ON OrderDetails.ProductID = Products.ProductID
where Products.ProductName = 'oil'

我可以通过 Products.ProductID -> OrderDetails.ProductID -> OrderDetails.OrderID -> Orders.OrderID -> Orders.CustomerID 获取 CustomerID,但我不确定如何在 sql 中表达。

编辑: 我正在寻找一个像这样的表:

 CustomerID | Quantity 
-----------------------
     1          10
     4          40
     5          1

测试:

我正在使用 SQL 到正则表达式计算器 here 使用要点 here

【问题讨论】:

  • 不清楚您的期望是什么 - 您是在每个客户单排之后,因此是总订单数量,还是您想查看单个订单/数量?

标签: mysql sql


【解决方案1】:

您需要汇总每个 CustomerId 的数量。

由于您只需要customerId,因此无需加入Customer 表。

还请注意,使用短而有意义的别名可以使查询不那么冗长:

select o.CustomerId, Sum(od.Quantity) Quantity
from Products p
join OrderDetails od on od.ProductID = p.ProductID
join orders o on o.orderid = od.orderid
where p.ProductName = 'oil'
group by o.CustomerId;

【讨论】:

  • 我得到一个错误:聚合列必须命名
  • 我不熟悉那个错误,上面应该不会产生任何错误。您可以创建一个 DBFiddle 并进行演示吗? @WhatTheWhat
  • 您好,感谢您回来。看看问题中的测试部分,详细说明我正在尝试做什么,谢谢
  • 我没有看到任何与 mysql 或任何 RDBMS 相关的内容。
【解决方案2】:
select customers.name,sum(OrderDetails.Quantity) as tot_qty
FROM Products
INNER JOIN OrderDetails ON OrderDetails.ProductID = Products.ProductID
inner join orders on orderdetails.orderid=orders.orderid
inner join customers on orders.customerid=customers.customerid
where Products.ProductName = 'oil'
group by customers.name

【讨论】:

  • 嗨,请参阅更新,我在第 1 行收到错误:必须命名聚合列
【解决方案3】:

忘记区别,改用group by

使用sum()aggregated function合并所有订单

select sum(OrderDetails.Quantity) as total, OrderDetails.CustomerID
FROM Products
INNER JOIN OrderDetails ON OrderDetails.ProductID = Products.ProductID
INNER JOIN Orders O ON O.OrderId = ON.OrderId
where Products.ProductName = 'oil'
group by Order.CustomerID

【讨论】:

  • 嗨,我得到:第 5 行错误:预期“,”,“;”,“除外”,“获取”,“拥有”,“相交”,“限制”,“偏移” 、“order”、“union”或输入结束但找到“w”。
  • @WhatTheWhat 哦,我的错,看看编辑
  • 我现在得到:Error: could not find column "OrderDetails.CustomerID" in schema [Products.ProductID : number, Products.ProductName : string, Products.Price : number, OrderDetails.OrderDetailID : number, OrderDetails.OrderID : number, OrderDetails.ProductID : number, OrderDetails.Quantity : number]
  • @WhatTheWhat 看到编辑
猜你喜欢
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多