首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MIN查询中获取其他字段

在MIN查询中获取其他字段
EN

Stack Overflow用户
提问于 2013-05-20 11:46:00
回答 4查看 94关注 0票数 0

我有一个名为soft的表,其中包含以下字段:

代码语言:javascript
复制
pname, title, developin, dcost

这里,pname是每个程序员的名字。

title是已开发项目的名称。

developin是用于开发项目的语言。

dcost是项目的开发成本。

我需要一个查询,它将显示程序员的名字&他们用每种语言开发的最便宜的包。

所以我尝试了这个查询:

代码语言:javascript
复制
SELECT developin, MIN(dcost) as 'total'
FROM software
GROUP BY developin
ORDER BY MIN(dcost)

使用这个查询,我得到了每种语言的最低成本,但是,,我如何也显示名称和标题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-20 12:05:40

这应该可以做到:

代码语言:javascript
复制
SELECT *
FROM software s
WHERE dcost = (SELECT MIN(dcost)
               FROM software
               WHERE developin = s.developin
               GROUP BY developin)

使用JOIN**:** 或使用

代码语言:javascript
复制
SELECT s.*
FROM software s
JOIN (SELECT developin, MIN(dcost) AS cost
      FROM software
      GROUP BY developin) s2
  ON s.developin = s2.developin AND s.dcost = s2.cost

我不确定不使用子查询是否可能。

为什么只在查询的, pname, title SELECT 部分中添加将无法工作:

考虑MIN(dcost), MAX(dcost) --这将得到dcost的最小值和最大值。因此,很明显,整个返回的行不能属于包含MIN(dcost)的行。

现在考虑一下MIN(dcost), MAX(dcost), pname, title,显然它不知道从哪个行取pnametitle。而且,由于可以添加MAX(dcost),Server无法从MIN(dcost)行返回pnametitle

是的,它可以检测到您只使用MIN,但是它会导致混淆和不一致的结果。

我希望这能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2013-05-20 12:10:09

对于SQL-Server 2005及更高版本,可以使用CTE和集合窗口函数执行此操作。

代码语言:javascript
复制
; WITH cte AS
  ( SELECT pname, title, developin, dcost, 
           MIN(dcost) OVER (PARTITION BY developin) AS total
    FROM software
  ) 
SELECT pname, title, developin, dcost
FROM cte
WHERE dcost = total
ORDER BY total ;
票数 1
EN

Stack Overflow用户

发布于 2013-05-20 11:50:40

是你想要

代码语言:javascript
复制
select Pname,developin, MIN(dcost)as 'total'
from software
group by developin,Pname
order by MIN(dcost)

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

https://stackoverflow.com/questions/16648813

复制
相关文章

相似问题

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