SQL max 涉及 3 个表的计数
Posted
技术标签:
【中文标题】SQL max 涉及 3 个表的计数【英文标题】:SQL max of a count involving 3 tables 【发布时间】:2013-03-14 03:01:45 【问题描述】:我有一个表Customers
和CustomerID
和PhoneNumber
,第二个表是Orders
,它有CustomerId
和OrderNumber
,第三个表OrderDetails
有OrderNumber
,@987654329 @ 和 UnitsOrdered
。我需要为下最大订单的客户 (PriceOfOneUnit * UnitsOrdered
) 找到 PhoneNumber
。将count(PriceOfOneUnit*UnitsOrdered)
设置为A1
,然后将 `Group By CustomerId Order By A1 DESC LIMIT 1 在加入 3 个表后显然不起作用。谁能帮忙。
【问题讨论】:
您要获取订单的总金额还是单笔订单的最大金额? 我要找到投资最多的人。这意味着当每个客户订购的物品数量乘以订购物品的价格时的最高数量。也就是说,顾客 John 订购了 2 件售价 5 美元的洗发水和一件售价 3 美元的护发素,顾客 Jane 订购了 4 件售价 1 美元的肥皂。我的结果需要显示约翰的信息。 如果出现平局,你想看什么? @user2204894 我明白了,但我要问的是我需要计算所有订单的总金额还是我只计算每个订单的总金额并获得最高的投资金额?跨度> 如果出现平局,我需要同时显示两者。 【参考方案1】:如果我们相信您的话,并且您想要的是最大的单个订单项而不是最大的订单,您可以找到最大的订单项,然后找到它所属的订单,然后是购买的客户下了那个订单。您可以使用虚拟聚合函数从 orderDetails 中拉回订单 ID。
编辑: 好的,对于刚起步的人,我认为用维恩图来思考并使用所谓的内联视图和子查询会更清楚:
select customername, phone
from customer
inner join
(
select o.id, customerid from orders o
inner join
(
select od.orderid from orderdetail od
where (od.qty * od.itemprice) =
(
select max(od.qty * od.itemprice)
from orderdetail as od
)
) as biggestorder
on o.id = biggestorder.orderid
) as X
on customer.id = X.customerid
括号内的每个查询都返回一个可以与其他集合连接/相交的集合。
【讨论】:
我知道这是各种错误,但我才刚刚开始。因此,我将对编辑提供任何帮助。选择customers.customerName,customers.phone,orders.customerNumber,count(orderdetails.priceEach*orderdetails.Quantityordered) from customers 完全加入customers.customerNumber=orders.customernumbers 完全加入orderdetails on orders.orderNumber=orderdetails.orderNumber;跨度> 【参考方案2】:试试看,
SELECT cus.CustomerId, cus.PhoneNumber
FROM Customers cus
INNER JOIN Orders a
ON cus.CustomerId = a.CustomerId
INNER JOIN OrderDetails b
On a.OrderNumber = b.OrderNumber
GROUP BY cus.CustomerId, cus.PhoneNumber
HAVING SUM(b.PriceOfOneUnit * b.UnitsOrdered) =
(
SELECT SUM(b.PriceOfOneUnit * b.UnitsOrdered) totalOrdersAmount
FROM Orders aa
INNER JOIN OrderDetails bb
On aa.OrderNumber = bb.OrderNumber
GROUP BY aa.CustomerId
ORDER BY totalOrdersAmount DESC
LIMIT 1
)
【讨论】:
以上是关于SQL max 涉及 3 个表的计数的主要内容,如果未能解决你的问题,请参考以下文章