0

と を持つ 1 つのテーブルCustomersCustomerIDありPhoneNumber、2 番目のテーブルはOrdersと がCustomerIdありOrderNumber、3 番目のテーブルOrderDetailsは と がOrderNumberありPriceOfOneUnitますUnitsOrderedPhoneNumber最大の注文をした顧客 ( ) のを見つける必要がありますPriceOfOneUnit * UnitsOrdered。ascount(PriceOfOneUnit*UnitsOrdered)を実行A1してから `Group By CustomerId Order By A1 DESC LIMIT 1 を実行しても、3 つのテーブルを結合した後は明らかに機能しません。誰でも助けることができます。

4

2 に答える 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 に答える