对于这个问题的杂乱名称,这是我的第一个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)
时,我获得了产品销售的最高ID,而不是销售产品最高数量的实际ID。
这是我关于SQL的第一个问题,对于任何缺乏信息感到抱歉,只需告诉我需要什么,我就会添加它。提前谢谢!
编辑:我正在使用SQL Server 2008
答案 0 :(得分: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
答案 1 :(得分: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)
注意:如果您有多个订购了最大数量的订单,这将为您提供单个产品的多个结果。