这是我的架构供应商(sid,sname,地址)Cata(sid,pid,cost)零件(pid,pname,color)
粗体是主键我试图写一个查询“找到最昂贵的部分的pids”我在使用设置差异这里是我的查询但是它返回目录中的所有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
);
试试这个:
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,因此<comparation失败,因此内部选择返回0行,因此对于所有行,“not in”条件为真
如果你想要最高成本的pid:
SELECT TOP 1 WITH TIES
c.pid,
c.cost
FROM
Cata AS c
ORDER BY
c.cost DESC
如果您想要五个最高成本的pid,请将其第一行更改为:
SELECT TOP 5 WITH TIES
我想这就是你要找的东西
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最昂贵的部分
祝好运!
你想要
找到最昂贵零件的pids
由于你没有清楚地提到你的要求,
我给出了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)
找到最昂贵零件的pids
最昂贵的部件是最低成本最高的部件,即你可以得到所有其他部件比你必须至少支付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美元的东西?所以这是我们必须比较的最低价格。