Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用相关子查询和MAX_Sql_Max_Correlated Subquery - Fatal编程技术网

Sql 使用相关子查询和MAX

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

我有两张桌子:

目录部分

零件号、零件描述、类别ID、EOQ、股价、, 再订购级别,库存级别,库存订单,重量

customorderline

订单ID、零件号、单价、订单数量、折扣、状态

我只需要返回每个类别中最昂贵库存零件的零件号、零件描述、库存价格和类别ID

这是迄今为止我想到的最好的

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)