这是我的架构 供应商( 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
);
答案 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:
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
查询说明:
解决方案2: 如果您在所有供应商中寻找最广泛的部分,那么查询可以简化如下。
SELECT Cata.pid FROM Cata
WHERE Cata.cost = (SELECT MAX(cost) cost FROM Cata)