从零学会SQL:汇总分析

一、知识点

汇总函数

分组

排序

分页

SQL运行顺序

二、练习

1、查询课程编号为“0002”的总成绩

分析思路
select 查询结果 [总成绩:汇总函数sum]
from 从哪张表中查找数据[成绩表score]
where 查询条件 [课程号是0002]

select sum(成绩)
from score
where 课程号 = '0002';

2、查询选了课程的学生人数

分析思路
select 查询结果 [不重复的学号:汇总函数count ]
from 从哪张表中查找数据[成绩表score];

select count(distinct 学号) as 学生人数 
from score;

3、查询各科成绩最高和最低的分

分析思路
select 查询结果 [课程号,最高分:max(成绩) ,最低分:min(成绩)]
from 从哪张表中查找数据 [成绩表score]
group by 分组 [各科成绩:按课程号分组];

select 课程号,max(成绩) as 最高分,min(成绩) as 最低分
from score
group by 课程号;

4、查询每门课程被选修的学生数

分析思路
select 查询结果 [课程号,选修该课程的学生数:汇总函数count]
from 从哪张表中查找数据 [成绩表score]
group by 分组 [每门课程:按课程号分组];

select 课程号, count(学号)
from score
group by 课程号;

5、查询男生、女生人数

分析思路
select 查询结果 [性别,对应性别的人数:汇总函数count]
from 从哪张表中查找数据 [学生表student]
group by 分组 [男生、女生人数:按性别分组];

select 性别,count(*)
from student
group by 性别;

6、查询平均成绩大于60分学生的学号和平均成绩

分析思路
select 查询结果 [学号,平均成绩:汇总函数avg(成绩)]
from 从哪张表中查找数据 [成绩表score]
group by 分组 [平均成绩:先按学号分组,再计算平均成绩]
having 对分组结果指定条件 [平均成绩大于60分]

select 学号, avg(成绩)
from score
group by 学号
having avg(成绩)>60;

7、查询至分析思路

select 查询结果 [学号,每个学生选修课程数目:汇总函数count]
from 从哪张表中查找数据 [课程的学生学号:课程表score]
group by 分组 [每个学生选修课程数目:按课程号分组,然后用汇总函数count计算出选修了多少门课]
having 对分组结果指定条件 [至少选修两门课程:每个学生选修课程数目>=2]少选修两门课程的学生学号

select 学号, count(课程号) as 选修课程数目
from score
group by 学号
having count(课程号)>=2;

8、查询同名同姓学生名单并统计同名人数

分析思路
select 查询结果 [姓名,人数:汇总函数count()]
from 从哪张表中查找数据 [学生表student]
group by 分组 [姓名相同:按姓名分组]
having 对分组结果指定条件 [姓名相同:count(
)>=2];

select 姓名,count(*) as 人数
from student
group by 姓名
having count(*)>=2;

9、查询不及格的课程并按课程号从大到小排列

分析思路
select 查询结果 [课程号]
from 从哪张表中查找数据 [成绩表score]
where 查询条件 [不及格:成绩 <60]
order by 对查询结果排序[课程号从大到小排列:降序desc];

select 课程号
from score 
where 成绩<60
order by 课程号 desc;

10、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列

分析思路
select 查询结果 [课程号,平均成绩:汇总函数avg(成绩)]
from 从哪张表中查找数据 [成绩表score]
group by 分组 [每门课程:按课程号分组]
order by 对查询结果排序[按平均成绩升序排序:asc,平均成绩相同时,按课程号降序排列:desc];

select 课程号, avg(成绩) as 平均成绩
from score
group by 课程号
order by 平均成绩 asc,课程号 desc;

sqlzoo练习

练习地址

1.更改查询语句,显示1950年的诺贝尔奖

select yr, subject, winner
from nobel
where yr = 1950;

2.谁赢得了1962年的文学奖(Literature)

select winner
from nobel
where yr = 1962 and subject = 'Literature';

3.“爱因斯坦”(Albert Einstein)获奖年份和奖项

select yr, subject
from nobel
where winner = 'Albert Einstein';

4.2000年及以后的和平奖(‘Peace’)得奖者

select winner
from nobel
where subject = 'Peace' and yr >= 2000;

5.1980年至1989年的文学奖获奖者的所有细节(年份,奖项,获奖者)

select yr, subject, winner
from nobel
where yr between 1980 and 1989 and subject = 'Literature';

6.查找下面获奖者的所有详细信息:

西奥多·罗斯福:Theodore Roosevelt
伍德罗·威尔逊:'Woodrow Wilson
吉米卡特:Jimmy Carter

select *
from nobel
where winner in ('Theodore Roosevelt', 'Woodrow Wilson', 'Jimmy Carter');

7.获奖姓名以John开头的获奖者

select winner
from nobel
where winner LIKE 'john%';

8.查找1980年物理学奖(Physics)获得者,以及1984年的化学奖(Chemistry)获得者

select *
from nobel
where (subject = 'physics' and yr = '1980') OR (subject = 'Chemistry' and yr = 1984);

9.查找1980年获奖者的年份,奖项和名称,不包括化学奖和医学奖('Chemistry', 'Medicine')

select *
from nobel
where yr = 1980 and subject NOT in ('Chemistry', 'Medicine');

10.在早年(1910年之前,不包括1910年)获得“医学”奖的人的年份,主题和名称,以及晚年(2004年之后,包括2004年)的“文学”奖的获奖者

select *
from nobel
where (subject  = 'Medicine' and yr < 1910) or (subject = 'Literature' and yr >= 2004);

11.查找获奖者(PETERGRÜNBERG)的获奖信息

select *
from nobel
where winner='PETER GRÜNBERG';

12.查找获奖者(Eugene O'Neill)的获奖信息

select *
from nobel
where winner = 'Eugene O''Neill';

如果字符串中包含单引号或双引号,该怎么处理?比如Eugene O'Neill?

使用sql的转义字符。在字符串中,有些符号有特殊含义,比如Eugene O'Neill中的单引号('),使用两个单引号('')表示字符串里面的单引号('),也就是转义字符。

这个例子里,Eugene O'Neill,在sql里这么写'Eugene O''Neill'

13.列出获奖者,年份以及获奖者从Sir开始的主题。首先显示最新的,然后按名称顺序显示

select winner, yr, subject
from nobel
where winner LIKE 'sir%'
order by yr DESC, winner;

14.显示1984年的诺贝尔获奖者及其奖项。按奖项和得奖者名字排序, 但化学奖和物理奖在最后列出。

/*如果写成 subject in ('Physics', 'Chemistry') DESC 则化学奖和物理奖在最前面列出*/
  SELECT winner,
         subject
    FROM nobel
   WHERE yr = 1984
ORDER BY subject IN ('Physics', 'Chemistry'),
-- 其他按“subject”和“winner”升序列出
         subject,
         winner;
sql解释:

subject in ('Physics','Chemistry')返回值(0或者1),
会对每一个subject做一个if的判断,有的是1,没有的是0
再用order by把这些值排序在下面

不是这两个科目('Physics','Chemistry')的就是0排在前边,
是这两个科目的返回1就排在后边了。
因为化学和物理科目题目要求在后面,所以引入此函数出现0、1,达成题目的要求

练习地址

1. 显示世界总人口

select sum(population) 
from world;

2. 列出所有洲名称,不能有重复值

select distinct continent 
from world;

3. 非洲(Africa)的GDP总和

select sum(gdp) 
from world
where continent='Africa';

4.有多少个国家具有至少百万(1000000)的面积。

select count(name) 
from world 
where area>=1000000;

5.('France','Germany','Spain')(“法国”,“德国”,“西班牙”)的总人口是多少?

select sum(population) 
from world
where name in('France','Germany','Spain');

6.显示每个大洲以及大洲的国家数量

select continent,count(name) 
from world
group by continent;

7.显示每个洲的国家数量,并且这些国家里人口数量至少为1000万

select continent,count(name) 
from world
where population>=10000000
group by continent;

8.列出每个洲名称,并且每个洲的总人口数要大于等于一亿

select continent 
from world
group by continent
having sum(population)>=100000000;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容