数据库查询 - 找到最昂贵的部分

时间:2018-02-27 22:18:55

标签: sql performance tsql schema

这是我的架构 供应商( sid ,sname,地址) CATA(的 SID,PID 下,成本) 份(的 PID 下,PNAME,颜色)

粗体是主键 我正在尝试编写查询 "找到最昂贵零件的价格" 我在这里使用设置差异是我的查询但是它返回目录中的所有pids而不是成本最高的那个

select Cata.pid 
from Cata 
where pid not in(
    select c.pid 
    from Cata c, Cata f 
    where c.sid=f.sid AND c.pid=f.pid AND c.cost<f.cost
);

5 个答案:

答案 0 :(得分:1)

试试这个:

select c1.pid 
from Cata c1
where not exists (
    select c2.pid 
    from Cata c2 
    where c2.cost > c1.f.cost
);

如果您想知道查询有什么问题,请注意内部SELECT返回0行,因为您要将项目的成本与自己进行比较,因此c.cost总是等于f.cost,所以&LT;比较失败,因此内部选择返回0行,因此所有行的“不在”状态为真

答案 1 :(得分:1)

如果您希望pid成本最高:

SELECT TOP 1 WITH TIES
    c.pid,
    c.cost
FROM
    Cata AS c
ORDER BY 
    c.cost DESC

如果您想要五个最高成本的pids,请将其第一行更改为:

SELECT TOP 5 WITH TIES

答案 2 :(得分:0)

我认为这就是你要找的东西

    SELECT
     p.PID
     , MAX(c.COST)

    FROM
     Parts p
    LEFT JOIN
     Cata c
    ON p.PID = c.PID

    GROUP BY
     p.PID

    ORDER BY
     MAX(c.COST)

这将返回每个PID最昂贵的部分

祝你好运!

答案 3 :(得分:0)

  

找到最昂贵零件的价格

最昂贵的部件是最低成本最高的部件,即您可以获得比这些必须至少支付xxx $的所有其他部件更便宜的部件。你可以通过热门查询得到这些。

select top(1) with ties
  pid
from cata
group by pid
order by min(cost) desc;

插图:

pid | supplier A | supplier B | supplier C
----+------------+------------+-----------
p1  |        10$ |        10$ |       100$
p2  |        40$ |        50$ |        60$

哪一部分更贵?我可以买10美元的p1。对于p2,我必须支付至少40美元。所以p2更贵。那个供应商C想要一个令人发指的100美元用于p1并不重要,因为谁会支付100美元购买10美元的东西?所以这是我们必须比较的最低价格。

答案 4 :(得分:0)

你想要

  

找到最昂贵零件的价格

由于您没有明确提及您的要求,

我已经给出了2个解决方案

  1. 解决方案1:为每个供应商找到最广泛的部分
  2. 解决方案2:找到所有部分中最昂贵的部分
  3. 使用适合您的。

    解决方案1:

    SELECT Cata.pid FROM Cata
    LEFT OUTER JOIN (SELECT Cata.sid, MAX(Cata.cost) cost FROM Cata GROUP BY Cata.sid) MostExpensive
    ON Cata.sid = MostExpensive.sid AND Cata.cost = MostExpensive.cost
    

    查询说明:

    • 首先,您应该尝试根据每个sid
    • 的成本找到最昂贵的东西
    • 然后,一旦你得到了最昂贵的派生表,找到与同一sid中的成本相匹配的pids。
    • 如果最昂贵的两个部分之间存在联系,则此查询将返回两个部分的pid。

    解决方案2: 如果您在所有供应商中寻找最广泛的部分,那么查询可以简化如下。

    SELECT Cata.pid FROM Cata
    WHERE Cata.cost = (SELECT MAX(cost) cost FROM Cata)
    
相关问题