Sql 使用相关子查询和MAX
我有两张桌子: 目录部分: 零件号、零件描述、类别ID、EOQ、股价、, 再订购级别,库存级别,库存订单,重量 及 customorderline 订单ID、零件号、单价、订单数量、折扣、状态 我只需要返回每个类别中最昂贵库存零件的零件号、零件描述、库存价格和类别ID 这是迄今为止我想到的最好的Sql 使用相关子查询和MAX,sql,max,correlated-subquery,Sql,Max,Correlated Subquery,我有两张桌子: 目录部分: 零件号、零件描述、类别ID、EOQ、股价、, 再订购级别,库存级别,库存订单,重量 及 customorderline 订单ID、零件号、单价、订单数量、折扣、状态 我只需要返回每个类别中最昂贵库存零件的零件号、零件描述、库存价格和类别ID 这是迄今为止我想到的最好的 SELECT IP.PartNumber, IP.PartDescription, IP.CategoryID, IP.StockPrice FROM InventoryPart IP, CustOrd
SELECT IP.PartNumber, IP.PartDescription, IP.CategoryID, IP.StockPrice
FROM InventoryPart IP, CustOrderLine COL
WHERE IP.PartNumber = COL.PartNumber
AND COL.UnitPrice IN
(SELECT MAX(COL.UnitPrice)
FROM CustOrderLine COL)
这段代码的问题是它返回所有类别的最大单价,而不是按类别分开
我已经在这个问题上纠缠了几个小时,我觉得我现在做的弊大于利。非常感谢您的帮助。类似的功能应该可以使用子查询获得与每个类别ID关联的
MAX
单价
SELECT DISTINCT IP.*
FROM InventoryPart IP
JOIN CustOrderLine COL ON IP.PartNumber = COL.PartNumber
JOIN (
SELECT IP.CategoryID, MAX(COL.UnitPrice) MaxPrice
FROM InventoryPart IP INNER JOIN
CustOrderLine COL ON IP.PartNumber = COL.PartNumber
GROUP BY IP.CategoryID
) T ON IP.CategoryId = T.CategoryId AND COL.UnitPrice = T.MaxPrice
这是一个显示每个类别具有最高单价的库存零件的缩减表
祝你好运。这里有一个简单的版本
SELECT a.PartNumber, a.PartDescription, a.CategoryID, a.StockPrice
FROM InventoryPart a
INNER JOIN
(
SELECT PartNumber, MAX(StockPrice) max_price
FROM Inventorypart
GROUP BY PartNumber
) b ON a.partNumber = b.PartNumber AND
a.StockPrice = b.max_price
为了获得更好的性能,请在列(零件号,股票价格)
更新1
SELECT a.PartNumber, a.PartDescription, a.CategoryID, a.StockPrice
FROM InventoryPart a
INNER JOIN
(
SELECT PartNumber, CategoryID, MAX(StockPrice) max_price
FROM Inventorypart
GROUP BY PartNumber, CategoryID
) b ON a.partNumber = b.PartNumber AND
a.StockPrice = b.max_price AND
a.CategoryID = b.CategoryID
及
样本数据?这假设股票价格和单价是相同的值,但就像我的答案一样。干得好。非常感谢你,JW。我之所以选择sgeddes的答案作为“接受答案”,是因为您的代码假定股票价格和单价为相同的值。除此之外,这对我来说也很好。谢谢!:)不要认为这会起作用——按零件号分组不会返回您的最高价格——请参阅fiddle:--仅按类别分组ID。谢谢你的帮助。我还想感谢您向我介绍SQL Fiddle。非常好的工具@克里斯托夫——不用担心,很高兴我能帮上忙。祝你好运!
SELECT a.PartNumber, a.PartDescription, a.CategoryID, a.StockPrice
FROM InventoryPart a
INNER JOIN
(
SELECT PartNumber, CategoryID, MAX(StockPrice) max_price
FROM Inventorypart
GROUP BY PartNumber, CategoryID
) b ON a.partNumber = b.PartNumber AND
a.StockPrice = b.max_price AND
a.CategoryID = b.CategoryID
ALTER TABLE InventoryPart ADD INDEX (PartNumber, StockPrice, CategoryID)