2017-04-09 8 views
-1

私は顧客の平均小計額を上回る小計金額をすべての注文に対して各顧客のCustomerID、CompanyName、OrderID、および小計に戻そうとしています。これらは私が使用しているテーブルと以下のクエリです。私が返す値が正しいかどうかは分かりませんし、クエリに基づいているかどうかを誰かが理解するのを助けてくれることを願っていました。前もって感謝します。MySQL - 参加時にサブクエリを使用して

Orders 
Columns 
    OrderID 
    CustomerID 
    EmployeeID 
    OrderDate 
    RequiredDate 

OrderDetails 
Columns 
    OrderID 
    ProductID 
    UnitPrice 
    Quantity 

Products 
Columns 
    ProductID 
    ProductName 
    QuantityPerUnit 
    UnitPrice 

Customers 
Columns 
    CustomerID 
    CompanyName 
    ContactName 
    Country 





SELECT A.CustomerID, A.CompanyName, A.Subtotal, A.OrderID, AVGSubtotal 
FROM (
    SELECT 
     C.CustomerID, 
     C.CompanyName, 
     (D.UnitPrice * P.QuantityPerUnit) AS Subtotal, 
     D.OrderID 
    FROM Customers C 
     JOIN Orders O ON C.CustomerID = O.CustomerID 
     JOIN OrderDetails D ON D.OrderID = O.OrderID 
     JOIN Products P ON P.ProductID = D.ProductID 
    GROUP BY 
     D.OrderID, C.CustomerID 
) A 
JOIN (
    SELECT 
     S.CustomerID, S.CompanyName, AVG(S.Subtotal) as AVGSubtotal 
    FROM (
     SELECT 
      C.CustomerID, 
      C.CompanyName, 
      (D.UnitPrice * P.QuantityPerUnit) AS Subtotal 
     FROM Customers C 
      JOIN Orders O ON C.CustomerID = O.CustomerID 
      JOIN OrderDetails D ON D.OrderID = O.OrderID 
      JOIN Products P ON P.ProductID = D.ProductID 
     GROUP BY 
      D.OrderID, C.CustomerID 
     ) S 
    GROUP BY 
     S.CustomerID 
) B ON A.CustomerID = B.CustomerID 
WHERE 
    A.CustomerID = B.CustomerID AND 
    A.Subtotal > B.AVGSubtotal 
ORDER BY 
    A.CustomerID, A.CompanyName 
; 
+0

あなたは "あなたのコードを見直し" へのいくつかを望んでいますか?エラー/失敗がない場合、Q&Aはあなたの投稿の場所ではありません。 – mickmackusa

答えて

1
select 
    c2.customerID, 
    c2.CompanyName, 
    c2.AVGSubtotal 
    o2.OrderID, 
    o2.UnitPrice * o2.Quantity as subtotal 
from (
    select 
    c.CustomerID, 
    c.CompanyName, 
    sum(o.UnitPrice * o.Quantity)/count(*) as AVGSubtotal 
    from 
    Customers c 
    inner join Orders o on (o.CustomerID = c.CustomerID) 
    inner join OrderDetails od on (od.OrderID = c.OrderID) 
    group by 
    o.CustomerID 
) as c2 
inner join Orders o2 on (o2.CustomerID = c2.CustomerID) 
where o2.UnitPrice * o2.Quantity > c2.AVGSubtotal 
関連する問題