1

我有两张桌子:

库存部分

PartNumber、PartDescription、CategoryID、EOQ、StockPrice、ReorderLevel、StockLevel、StockOnOrder、重量

客户订单行

OrderID、PartNumber、UnitPrice、OrderQuantity、折扣、状态

我只需要返回每个类别中最昂贵的库存零件的PartNumber、PartDescription、StockPrice 和 CategoryID

这是迄今为止我想出的最好的...

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)

此代码的问题在于它返回所有类别的 MAX UnitPrice,而不是按类别分隔

我已经被这个问题困住了几个小时,我觉得我现在做的弊大于利。我真的很感谢你的帮助。

4

2 回答 2

1

这是一个简单的版本。

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

为了获得更好的性能,添加一个INDEXon 列(PartNumber, StockPrice)

ALTER TABLE InventoryPart ADD INDEX (PartNumber, StockPrice)

更新 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

ALTER TABLE InventoryPart ADD INDEX (PartNumber, StockPrice, CategoryID)
于 2013-02-08T02:44:28.507 回答
1

这样的事情应该使用子查询来获取MAX与每个 CategoryId 关联的 UnitPrice。

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

这是一个简化的Fiddle,它显示了每个类别单价最高的库存零件。

祝你好运。

于 2013-02-08T02:38:25.880 回答