2017-04-07 38 views
0

我遇到此查詢的語法問題。我試圖從各個國家返回一家公司的最大總額。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 
    T1.Country, 
    CompanyName, 
    T1.OrderSum 
FROM 
    (SELECT 
     C.Country, 
     C.CompanyName, 
     SUM(UnitPrice * Quantity) AS OrderSum 
    FROM Customers C 
     JOIN Orders O 
      ON C.CustomerID = O.CustomerID 
     JOIN OrderDetails D 
      ON D.OrderID = O.OrderID 
    GROUP BY C.Country) T1 
      JOIN 
      -- TOP PAYMENT TOTALS BY COUNTRY 
      (SELECT COUNTRY, 
        MAX(OrderSum) AS OrderSum 
      FROM 
      -- PAYMENT TOTALS BY CUSTOMER 
       (SELECT  C.Country, 
          C.CompanyName, 
          SUM(UnitPrice * Quantity) AS OrderSum 
       FROM Customers C 
        JOIN Orders O1 
         ON O1.CustomerID = C.CustomerID 
        JOIN OrderDetails D1 
         ON D1.OrderID = O1.OrderID 
       GROUP BY C.COUNTRY, C.CompanyName) T2 
      GROUP BY COUNTRY) T3 
     ON T1.COUNTRY = T3.COUNTRY 
      AND T1.OrderSum = T3.OrderSum 
ORDER BY Country; 

此查詢僅返回三個國家:

Ireland Hungry Owl All-Night Grocers 57317.3900 
Norway Sant Gourmet 5735.1500 
Poland Wolski Zajazd 3531.9500 

但是,這個查詢我試過了,返回所有國家,但我不確定它是否正確,因爲我沒有像在pre中那樣包含'max'值vious查詢:

SELECT 
    T1.Country, 
    CompanyName, 
    T1.OrderSum 
FROM 
    (SELECT 
     C.Country, 
     C.CompanyName, 
     SUM(UnitPrice * Quantity) AS OrderSum 
    FROM Customers C 
     JOIN Orders O 
      ON C.CustomerID = O.CustomerID 
     JOIN OrderDetails D 
      ON D.OrderID = O.OrderID 
    GROUP BY C.CompanyName) T1 
GROUP By Country 
ORDER BY Country; 

我也不能確定,如果我正確地計算訂單總數,這可能是我的一部分錯誤。但我試圖從每個訂單數量最多的國家找到公司。 對不起,所有的文字。

回答

1

下面的查詢將只列出每個國家最大的訂單總額的公司:

SELECT A.Country, A.CompanyName, A.OrderSum 
FROM (
    SELECT 
     C.Country, 
     C.CompanyName, 
     SUM(D.UnitPrice * D.Quantity) AS OrderSum 
    FROM Customers C 
     JOIN Orders O ON C.CustomerID = O.CustomerID 
     JOIN OrderDetails D ON D.OrderID = O.OrderID 
    GROUP BY 
     C.Country, C.CustomerID 
) A 
JOIN (
    SELECT 
     S.Country, MAX(S.OrderSum) as MaxSum 
    FROM (
     SELECT 
      C.Country, 
      C.CompanyName, 
      SUM(D.UnitPrice * D.Quantity) AS OrderSum 
     FROM Customers C 
      JOIN Orders O ON C.CustomerID = O.CustomerID 
      JOIN OrderDetails D ON D.OrderID = O.OrderID 
     GROUP BY 
      C.Country, C.CustomerID 
     ) S 
    GROUP BY 
     S.Country 
) B ON A.Country = B.Country 
WHERE 
    A.Country = B.Country AND 
    A.OrderSum = B.MaxSum 
ORDER BY 
    A.Country, A.CompanyName 
; 

[更新]

注意上面的SQL如下OrderSum在您列出的查詢計算方法。鑑於表ProductsQuantityPerUnitUnitPrice,我懷疑你的OrderSum也應該乘以QuantityPerUnit - 在這種情況下,你需要修改數學爲OrderSum