一、汇总函数(Aggregate Functions)
count(列名):求某列的行数
sum(列名):对某列的数据求和
avg(列名):对某列的数据求平均值(只能对数值类型的列计算)
max(列名):求某列数据的最大值(只能对数值类型的列计算)
min(列名):求某列数据的最小值
需要注意的点:
- 只有count()可以用星号*代替列名
- 每个函数只能操作一个列
- 汇总函数只能运用在SELECT 或者 HAVING 语句中。
- distinct对max/min语句没有影响,但是对sum/avg有影响。
练习:
1.查看课程编号为“0002”的总成绩。
2. 查询选了课程的学生人数。
二、分组(Grouping)
可以使用group by 语句对数据记录进行分组。
select 查询结果
from 从哪张表中查找数据
where 查询条件
group by 分组
SQL运行顺序:
- Step1 from从哪张表格中查找数据
- Step2 where 查询出符合条件的行
- Step3 group by 对数据进行分组
- Step4 select 在select语句中我们可以应用函数,得到组合结果。
练习:
- 查询各科成绩最高和最低的分
2. 查询每门课程被选修的学生数
3. 查询男生、女生人数
三、对分组指定条件(Having)
运用having对分组指定条件。
select 查询结果
from 从哪张表中查找数据
where 查询条件
group by 分组
having 对分组结果指定条件
SQL运行顺序:
- Step1 from从哪张表格中查找数据
- Step2 where 查询出符合条件的行
- Step3 group by 对数据进行分组
- Step4 having 对分组结果指定条件
- Step5 select 在select语句中我们可以应用函数,得到组合结果
练习:
- 查询平均成绩大于60分学生的学号和平均成绩。
2. 查询至少选修两门课程的学生学号。
3. 查询同名同姓学生名单并统计同名人数。
四、 对查询结果进行排列(order by)
select 查询结果
from 从哪张表中查找数据
where 查询条件
group by 分组
having 对分组结果指定条件
order by 对查询结果排序,降序desc,升序asc
limit 从查询结果中取出指定行
SQL运行顺序:
- Step1 from从哪张表格中查找数据
- Step2 where 查询出符合条件的行
- Step3 group by 对数据进行分组
- Step4 having 对分组结果指定条件
- Step5 select 在select语句中我们可以应用函数,得到组合结果
- Step6 order by对查询结果进行排序
- Step7 limit从查询结果中取出指定的行
练习:
- 查询不及格的课程并按课程号从大到小排列。
2. 查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列。
五、用sql解决业务问题
step1 翻译成大白话
step2 写出分析思路
step3 写出对应的sql子句
练习:
- 如何计算每门课程的平均成绩并且平均成绩大于等于80分
每门课程--->分组
平均成绩--->汇总函数avg
大于等于80--->条件
思路:
select 课程号,平均成绩
from score表格提取数据
where 没有
group by 课程号
having 平均成绩大于等于80
order by 没有
limit 没有
补充:
转义字符
在字符串中,有些符号有特殊含义,例如EUGENE O'NEILL中的单引号('),使用两个单引号('')表示字符串里面的单引号('),也就是转义字符。
即在写条件时,EUGENE O'NEILL,在sql中应该写成'EUGENE O''NEILL'。
sqlzoo平台Select_From_Nobel
这部分题目使用的是nobel表:诺贝尔奖信息表
sqlzoo平台Select_From_COUNT
这部分题目使用的是world表:世界国家信息表