1

表:

Classes(class, type, country, numGuns, Bore, displacement)
Ships(name, class, launched)

问题:找到每个级别的第一艘船下水的年份?

我的尝试:

         select class, min(launched) from Ships
         group by (class)

提供的答案:

         select class, launched from ships as s1
         where launched <= ALL (select year from ships as s2
                                where s2.class = s1.class)

所以我的问题是,我会从我的查询中得到想要的结果吗?我真的不明白它是否像提供的答案那样复杂,尤其是当表中没有年份这样的列时。

组中的最小年份应对应于该级别的第一艘船。

4

3 回答 3

1

是的,你的答案有效。

事实上,它比提供的答案更好,因为该查询实际上返回了一个类中的所有船舶和发射,该类是在该类推出的第一年。

于 2013-03-10T18:12:36.067 回答
0

正确解决这个问题。

您只是从Ships表中选择,但很可能有些classes人没有在Ships表中分配任何船只,您也需要考虑这些,因此使用 aLEFT JOIN来遵守条件。

SELECT C.class, 
       CASE WHEN S.launched IS NULL THEN 
       (SELECT MIN(launched) 
        FROM   Ships as S 
       WHERE   S.class = C.class) ELSE S.launched END
FROM   Classes as C LEFT JOIN Ships as S
ON     C.class = S.name;
于 2017-10-13T05:42:05.187 回答
0
select c.class , min (launched)
from classes c left join ships s on c.class = s.class 
group by c.class
;
于 2019-10-13T12:22:01.073 回答