2012-03-16 33 views
1

對不起,這個問題的混亂名稱,這是我的第一個SQL問題。從SQL中的JOIN獲取數據

有沒有人知道如何獲得產品最大數量的訂單的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)獲得該產品出售,而不是實際的ID,其中該產品的最高數量被賣的最高的ID。

這是我第一個關於SQL的問題,對於任何信息缺乏抱歉,只是告訴我需要什麼,我會添加它。提前致謝!

編輯:我使用的是SQL Server 2008中

+1

當您嘗試運行它時,或者只是返回了0條記錄時,您是否收到錯誤消息? – kingcoyote 2012-03-16 21:06:51

+0

如何決定在關係情況下報告哪個OrderId? – Sparky 2012-03-16 21:09:35

+0

我收到錯誤的結果。我得到最高的ID,而不是按產品名稱分組的MAX([Order Details] .Quantity)所在的實際ID。 – 2012-03-16 21:13:14

回答

1
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) 

注:這會給你多個結果的單品,如果你有多個訂單,最大訂貨數量。

+0

剛剛嘗試了答案,但它給了我一個錯誤 – 2012-03-16 21:15:18

+0

我認爲這將在mySQL中工作,但不確定其他變體,因爲select子句中的OrderID不是聚合的一部分。 – Sparky 2012-03-16 21:16:00

+0

嘗試使用Max(OrderID)並查看錯誤是否消失,上面的語法在mySQL中工作 – Sparky 2012-03-16 21:16:43

4

您可以使用分析功能是:

修訂

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 
+0

+1,但'RANK()'可能更合適。 – 2012-03-16 21:25:45

+0

它的工作,但說實話,我只是一個開山人,我不明白這個代碼的大部分。我道歉。 – 2012-03-16 21:28:22

+0

但你如何處理關係?如果一個給定的產品有兩個或更多數量相同的訂單,這個查詢不會只報告第一個訂單嗎? – Sparky 2012-03-16 21:28:27