内容:
1. 汇总分析
2. 分组
3. 对分组结果指定条件
4. 用sql解决业务问题
5. 对查询结果排序
6. 如何看懂报错信息
7.练习题:sqlzoo
1. 汇总分析
- 注意⚠️
- count函数得出的是除去空值null的行数。如果要包括空值后的行数,用函数count(*)
- 所有的汇总函数,如果输入的是列名,那么在计算前,会将空值排除在外,才进行计算。
- sum和avg函数只能对数值类型的列计算
- Count,max和min能对任何数据类型进行计算。
- 注意⚠️:区分好空值null,字符串叫"null" 和 ‘ ’。空值null是没被定义的值,所以无法参与计算,而字符串叫"null"和‘ ’可以参与计算。教师号为003对应的null是空值null,所以没有参与count函数的计算,而教师号为004对应的是‘ ’, 参与了count函数的计算。
- 注意⚠️如果我们不想函数计算重复值,则用distinct函数。
-----------------------------------------练习---------------------------------------------
- 查询课程编号为“0002”的总成绩
2. 查询选了课程的学生人数
2. 分组
group by 某个条件
- sql的运行顺序
- 注意⚠️:先按照书写的顺序运行篮筐里的子句,之后再运行select子句。
-----------------------------------------练习---------------------------------------------
1.查询各科(每科)成绩最高和最低分(按科目分组)
2.查询每门课程被选修的学生数(按课程分组)
3.查询男生,女生人数(按性别分组)
- 小结:如果问题里出现每,如每个,每门的字眼,即代表要分层,要group by 。
3. 对分组结果指定条件
having
sql 运行顺序:
- 注意⚠️:先按照书写的顺序运行篮筐里的子句,之后再运行select子句。
-----------------------------------------练习---------------------------------------------
- 查询平均成绩大于60分学生的学号和平均成绩
2. 查询至少选修两门课程的学生学号
- 查询同名同姓学生名单并统计同名人数
4. 用sql解决业务问题
- 如何用sql解决业务问题?
解决问题的思路:1.先把问题翻译成自己能懂的大白话,2.写出解题思路 3.写出对应的sql子句
? 计算各科的平均成绩
* 各科=每门科目= group by 课程号
? 计算各科的平均成绩并且平均成绩大于等于80分
5. 对查询结果排序
-- 降序(从大到小)
order by desc
-- 升序(从小到大)
order by asc
- 指定多个排序列名
order by 列名1 asc, 列名2 desc;
- 空值(null)的排序
order by 列名
- 从查询结果中取出指定行
--limit后加数字,如果是limit 2 即为从查询结果中取出前两行数据
limit
-----------------------------------------练习---------------------------------------------
- 查询不及格的课程并按课程号从大到小排列
2. 查询每门课程的平均成绩,结果按平均成绩升序排序。平均成绩相同时,按课程号降序排列。
思路:每门课程(group by), 升序排序(order by)
6. 如何看懂报错信息
- 之所以出现错误是因为having子句先运行,之后再运行select子句。在运行having子句时,平均成绩还未被建立。
*之所以出现错误,是因为where子句中不可使用汇总函数。
- 这里的数据类型是字符串,并非数字
6. 练习题:sqlzoo
SQLZOOsqlzoo.net- SELECT from Nobel
*单引号里的单引号要用两个单引号代替
2. SUM and COUNT
SUM and COUNT - SQLZOOsqlzoo.net