sqlzoo练习系列(七)——子查询之诺贝尔奖子查询

 【Tips】

  • sqlzoo官网链接:https://sqlzoo.net/wiki/SQL_Tutorial/zh
  • 每个系列开头介绍所用表及其信息
  • 每道题均测试通过,含有题目描述、代码和结果
  • 题目为自己简写,最好在官网查看具体题目
  • 部分测试结果不完整,仅为一部分截图

诺贝尔奖子查询练习链接:https://sqlzoo.net/wiki/The_nobel_table_can_be_used_to_practice_more_subquery./zh

所用的表nobel

  • yr:获奖年份
  • subject:获奖类别
    • Chemistry:化学奖
    • Economics:经济奖
    • Literature:文学奖
    • Medicine:药学奖
    • Peace:和平奖
    • Physics:物理奖
  • winner:获奖者

1.红十字国际委员会 (International Committee of the Red Cross) 曾多次获得和平奖。 试找出与红十字国际委员同年得奖的文学奖(Literature)得奖者和年份

--多次获得,使用IN
SELECT winner,yr
FROM nobel 
WHERE yr IN (SELECT yr FROM nobel 
            WHERE winner = 'International Committee of the Red Cross'
            AND subject = 'Peace')
AND subject = 'Literature'

2.日本物理学家Toshihide Maskawa获得物理奖,同年还有两位日本人一起获得物理奖,列出这两人的名称

--其余两人,不包含Toshihide Maskawa
SELECT winner
FROM nobel
WHERE yr = (SELECT yr FROM nobel
           WHERE winner = 'Toshihide Maskawa'
           AND subject = 'Physics')
AND subject = 'Physics'
AND winner!= 'Toshihide Maskawa'

3.首次颁发的经济奖的得奖者是谁

SELECT winner
FROM nobel 
WHERE subject='Economics'
AND yr <= ALL(SELECT yr FROM nobel
          WHERE subject='Economics') 

4.哪几年颁发了物理奖,但没有化学奖

SELECT DISTINCT yr
FROM nobel
WHERE subject='Physics'
AND yr NOT IN (SELECT yr FROM nobel
               WHERE subject='Chemistry')

5.哪几年得奖者人数多于12人,列出获奖人数多于12人的年份,奖项和得奖者

SELECT yr,subject,winner
FROM nobel
WHERE yr IN (SELECT yr FROM nobel
             GROUP BY yr
             HAVING COUNT(winner) >12)

6.哪些得奖者得奖大于1次呢?他们是哪一年获得哪个奖项呢?列出他们的名字,获奖年份及奖项。先按名字,再按年份顺序排序。

SELECT winner,yr,subject
FROM nobel
WHERE winner IN (SELECT winner FROM nobel
                 GROUP BY winner
                 HAVING COUNT(subject)>1)
ORDER BY winner,yr

原文地址:https://www.cnblogs.com/tuzinn/p/13835583.html