本节的内容:
一、汇总分析
(1)常用的函数有:
count函数:求某列的行数。
Sum函数:对某列数据求和,但只对数据类型的列计算。
avg函数:求某列的平均值,但只对数据类型的列计算。
Max函数:求某列数据的最大值
min函数:求某列数据的最小值
(2)常用函数的实际运用:
a.查询学生表中学生的总人数,则可用count函数求出。
用count函数后:
注意:若计算的是列名,则会计算将空值排除在外的结果,如果用count(*)表示计算该列的所有行数,包括空值行。
b.用sum函数计算成绩表中学生的总成绩。
用sum函数后:
c.计算成绩表中学生的平均成绩。用avg计算如下:
d.求成绩表中学生成绩的最大值,最小值。则用max最大值函数和min最小值函数。
结果如下:
e.若计算之前,不想计算重复值,则可以在汇总函数前加入distinct函数,去除重复值。
(3)注意SQL书写规则:
练习:汇总分析(常见面试题)
a. 查询课程号为“0002”的总成绩。
b.查询选了课程的学生人数。
二、分组
分组函数:group by
练习:分组(常见面试题)
a. 查询各科成绩最高和最低的分
b. 查询每门课程被选修的学生数
c. 查询男生、女生人数。
运行结果:
三、对分组结果指定条件
练习:分组结果的条件(常见面试题)
a. 查询平均成绩大于60分学生的学号和平均成绩
b. 查询至少选修两门课程的学生学号。
题目意思翻译成大白话就是:
第一步:需要先计算出每个学生选修的课程数据,需要按学号分组
第二步:至少选修两门课程,也就是每个学生选修课程数量>=2,对分组结果指定条件。
c.查询同名同姓学生名单并统计同名人数。
题目意思翻译成大白话就是:
第一步:查找出姓名相同的学生有谁,每个姓名相同学生的人数。
查询结果:姓名,人数
条件:怎么算姓名相同呢?按姓名分组后人数大于等于2,因为同名的人数大于等于2.
四、用SQL解决业务问题。
1.翻译成大白话,2写出分析思路;3.写出对应的SQL子句。如:三、中的c.
五、对查询结果进行排序:
a)order by: asc升序,从小到大;desc降序,从大到小。
b).SQL语句的运行顺序:
先运行2-5的子句,再运行1的子句,最后运行6的子句。
c).指定多个排序列名:
注:当多个列名进行排序时,排序顺序为从左到右,当第一个列名存在相同的值时,按第二个值进行排序。
d).空值(null)的排序:
e).当数据库中有很多数据时,我们只想提取其中部分数据时,可以用limit子句,从查询结果中查询指定行的数据。
例如:从查询结果中取出前两行数据。
SQL运行顺序:2-3-4-5-1-6-7,先运行红框子句,select子句,最后运行黄框子句。
练习:理解sql的运行顺序(常见面试题):
a. 查询成绩小于90分的课程并按课程号从大到小排序
b. 查询每门课程的平均成绩,结果按平均成绩升序排序。平均成绩相同时,按课程号降序排列。
六、如何看懂报错信息。
常见错误:在having子句 中使用了select里的别名,如:
常见错误:在where中使用了聚合函数
常见问题:字符串类型的数字的排序规则与数字类型的排序规则不一样。
练习题:sqlzoo
练习1:
练习2:
练习3:
练习4:
练习5:
练习6:
练习7:
练习8*:
练习9:
练习10:
封面图片来源于网络。