と を持つ 1 つのテーブルCustomers
がCustomerID
ありPhoneNumber
、2 番目のテーブルはOrders
と がCustomerId
ありOrderNumber
、3 番目のテーブルOrderDetails
は と がOrderNumber
ありPriceOfOneUnit
ますUnitsOrdered
。PhoneNumber
最大の注文をした顧客 ( ) のを見つける必要がありますPriceOfOneUnit * UnitsOrdered
。ascount(PriceOfOneUnit*UnitsOrdered)
を実行A1
してから `Group By CustomerId Order By A1 DESC LIMIT 1 を実行しても、3 つのテーブルを結合した後は明らかに機能しません。誰でも助けることができます。
2 に答える
0
私たちがあなたの言葉に従い、あなたが望むのは最大の注文ではなく最大の単一の品目である場合、最大の品目を見つけてから、それが属する注文を見つけ、次にその注文を出した顧客を見つけることができます. ダミーの集計関数を使用して、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
括弧内の各クエリは、他のセットと結合/交差できるセットを返します。
于 2013-03-24T16:50:49.407 に答える
0
これを試してみてください。
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
)
于 2013-03-24T17:23:49.827 に答える