首页 > 技术文章 > sqlzoo练习系列(九)——群组函数之Nobel表

tuzinn 2020-10-20 10:11 原文

 【Tips】

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

群组函数之Nobel表练习链接:https://sqlzoo.net/wiki/The_nobel_table_can_be_used_to_practice_more_SUM_and_COUNT_functions./zh

所用的表nobel

  • yr:获奖年份
  • subject:获奖类别
  • winner:获奖者

 

1.一共颁发了多少个奖

SELECT COUNT(subject) FROM nobel

2.列出每一个奖项,只列一次

SELECT DISTINCT subject
FROM nobel

3.找出物理奖的总颁发次数

SELECT COUNT(subject)
FROM nobel
WHERE subject='Physics'      

4.对每一个奖项,列出其颁发次数

SELECT subject,COUNT(subject)
FROM nobel
GROUP BY subject

5.对每一个奖项,列出首次颁发的年份

SELECT subject,MIN(yr)
FROM nobel
GROUP BY subject    

6.对每一个奖项,列出2000年颁发的数目

SELECT subject,COUNT(subject)
FROM nobel
WHERE yr=2000
GROUP BY subject

7.对每一个奖项,列出有多少个不同的得奖者

SELECT subject,COUNT(DISTINCT(winner))
FROM nobel
GROUP BY subject

8.对每一个奖项,列出有多少年曾颁发过

SELECT subject,COUNT(DISTINCT(yr))
FROM nobel
GROUP BY subject

9.列出哪些年同年有3个物理奖的获得者

SELECT yr
FROM nobel
WHERE subject='Physics'
GROUP BY yr
HAVING COUNT(winner)=3

10.列出谁得奖多于一次

SELECT winner
FROM nobel
GROUP BY winner
HAVING COUNT(winner)>1

11.列出谁获得多于一个奖项

SELECT winner
FROM nobel
GROUP BY winner
HAVING COUNT(DISTINCT(subject))>1
--奖项去重

12.哪年哪个奖项,是同一奖项颁发给3个人。只列出2000年及以后的资料

SELECT yr,subject
FROM nobel
WHERE yr>=2000
GROUP BY yr,subject
HAVING COUNT(winner)=3

推荐阅读