Получение данных из JOIN в SQL - PullRequest
1 голос
/ 17 марта 2012

Извините за грязное название вопроса, это мой первый SQL-запрос.

Кто-нибудь знает, как получить OrderID ордера, в котором было продано максимальное количество товара?

Это мой код:

SELECT Products.ProductName, MAX([Order Details].Quantity), MAX(OrderID)
FROM Products 
INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID
GROUP BY Products.ProductName

Когда я говорю MAX(OrderID), я получаю самый высокий идентификатор, где был продан продукт, а не фактический идентификатор, где было продано наибольшее количество продукта.

Это мой первый вопрос по SQL, извините за недостаток информации, просто скажите мне, что нужно, и я добавлю его. Заранее спасибо!

РЕДАКТИРОВАТЬ: я использую SQL Server 2008

Ответы [ 2 ]

4 голосов
/ 17 марта 2012

Для этого вы можете использовать аналитические функции:

ОБНОВЛЕНО

SELECT ProductName, Quantity, OrderID
FROM (  SELECT  Products.ProductName, [Order Details].Quantity, OrderID, 
                ROW_NUMBER() OVER(PARTITION BY Products.ProductName ORDER BY [Order Details].Quantity DESC) Corr
        FROM Products 
        INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID) A
WHERE Corr = 1

Таким образом, вы получите только одну запись для каждого продукта, что означает, что если у вас естьболее одного заказа с одинаковым максимальным количеством, в результате вы получаете только один.Вы можете добавить больше столбцов (например, дату заказа) на ORDER BY, чтобы выбрать самый новый или самый старый из них.Если вы хотите получить все записи, связанные с количеством, вы можете использовать RANK вместо ROW_NUMBER.

SELECT ProductName, Quantity, OrderID
FROM (  SELECT  Products.ProductName, [Order Details].Quantity, OrderID, 
                RANK() OVER(PARTITION BY Products.ProductName ORDER BY [Order Details].Quantity DESC) Corr
        FROM Products 
        INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID) A
WHERE Corr = 1
1 голос
/ 17 марта 2012
SELECT Products.ProductName, [Order Details].OrderID, [Order Details].Qty 
FROM Products 
INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID 
WHERE [Order Details].Quantity = (SELECT MAX(p.Quantity) FROM [Order Details] p WHERE p.ProductID = Products.ProductID)

Примечание: это даст несколько результатов для одного продукта, если у вас есть несколько заказов с максимальным заказанным количеством.

...