繁体   English   中英

SQL:如何添加具有最小值的列

[英]SQL: How to add a column with the minimum value

多谢您的支持,我想构建一个SQL qry来获得一个额外的列,其结果是基于2个表的代码组的最小值。

例如:我有2张桌子

表:提取物

AppCode | Phase |
------------------ 
AB | Phase 2
ABC | Phase 1
ABC | Phase 2
ABCD | Phase 1
ABCE | Phase 3
ABCE | Phase 2 

表:阶段

PhaseName | Objective
------------------
Phase 1 | 2
Phase 2 | 4
Phase 3 | 24

预期输出:

AppCode |   PhaseName |  Objective |  MinObjetivo 
------------------
AB |       Phase 2 |        4 |            4
ABC |      Phase 1 |        2 |            2 
ABC |      Phase 2 |        4 |            2 
ABCD |     Phase 1 |        2 |            2
ABCE |     Phase 3 |        24 |           4
ABCE |     Phase 2 |        4 |            4

请告诉我; 如果用这个例子还不够

这基本上是一个join ,但有所不同。 大多数数据库都支持窗口功能,而这些功能可以满足您的要求:

select e.appcode, p.phasename, p.objective,
       min(p.objective) over (partition by e.appcode) as minObjetivo
from extract e join
     phases p
     on e.phase = p.phasename;

在MySQL中:

SELECT e.appcode, p.phasename, p.objective, m.minobjectivo
FROM extract AS e
JOIN phases AS p ON e.phase = p.phasename
JOIN (SELECT e1.appcode, MIN(p1.objective) as minobjectivo
      FROM extract AS e1
      JOIN phases AS p1 ON e1.phase = p1.phasename
      GROUP BY e1.appcode) AS m
    ON e.appcode = m.appcode

它以extractphases之间的普通联接开始,以获得前三列。 然后,编写一个子查询,该子查询获取每个应用程序代码的最低目标,并将其联接以获取其他列。

演示

这是另一种写法:

SELECT e.appcode, p.phasename, p.objective, MIN(p1.objective) AS minobjectivo
FROM extract AS e
JOIN phases AS p ON e.phase = p.phasename
JOIN extract AS e1 ON e1.appcode = e.appcode
JOIN phases AS p1 ON e1.phase = p1.phasename
GROUP BY e.appcode, p.phasename

这是相似的,但是附加联接是在主查询而不是子查询中完成的。

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM