首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库查询-找到最昂贵的部分

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

Stack Overflow用户
提问于 2018-02-27 22:18:54
回答 4查看 1.1K关注 0票数 0

这是我的模式Suppliers(​sid,​名称,地址) Cata(sid,pid,cost)部件(pid,pname,color)

粗体是我正在尝试编写的查询“查找最昂贵部件的pids”的主键,我在这里使用的是set差异,这里是我的查询,但是它返回目录中的所有pids,而不是成本最高的

代码语言:javascript
运行
复制
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
);
EN

回答 4

Stack Overflow用户

发布于 2018-02-27 22:26:44

试试这个:

代码语言:javascript
运行
复制
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,因此<比较失败,因此内部select返回0行,因此所有行的"not in“条件都是正确的

票数 1
EN

Stack Overflow用户

发布于 2018-02-27 22:44:05

如果您想要具有单个最高成本的pid:

代码语言:javascript
运行
复制
SELECT TOP 1 WITH TIES
    c.pid,
    c.cost
FROM
    Cata AS c
ORDER BY 
    c.cost DESC

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

代码语言:javascript
运行
复制
SELECT TOP 5 WITH TIES
票数 1
EN

Stack Overflow用户

发布于 2018-02-27 22:29:24

我想这就是你要找的

代码语言:javascript
运行
复制
    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。

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49018883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档