2017-04-07 1 views
0

이 쿼리의 구문에 문제가 있습니다. 저는 각 국가에서 한 회사에 대해 가장 큰 총액을 반환하려고합니다. ,MySQL - 하위 쿼리를 사용하여 평균 검색

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

, 나는 노력이 쿼리 : 나는 시도

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; 

이 쿼리는 세 나라를 반환

표는 다음과 같다 모든 국가를 반환하지만, 내가 '사전'에서했던 것처럼 '최대'값을 포함하지 않았기 때문에 그것이 맞는지 확실하지 않습니다. 큰 쿼리 :

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이 나열 쿼리에서 계산되는 방식을 따른다고

참고. Products 테이블에 QuantityPerUnitUnitPrice이 있다고 가정하면 OrderSumQuantityPerUnit을 곱해야한다고 생각합니다.이 경우 OrderSum의 수학을 수정해야합니다.

관련 문제