一、汇总分析

1.知识点汇总

count:求某列的行数,如果函数中输入的时【列名】除去空值null以后的行数;如果输入【*】则会输出所有的行数

sum:对某列数据求和(只能对数据类型的列计算)

avg:求某列数据求和的平均值(只能对数值类型的列计算)

max:求某列数据的最大值

min:求某列数据的最小值

2.习题

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

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

思路解析:一开始我是从student数据表里面对姓名去重后计算学生总人数,但是这个思路有两个问题:第一个不一定每个学生都选了课程,我忽略了前置条件“选了课程”;第二个对“学生姓名”去重,不够严谨,会存在同名同姓不同人的情况,应该对“学号”去重,学号是唯一的。

正确思路:应该在“score”表中对“学号”去重,并且将最终结果设置为“学生人数”

二、分组

1.知识点汇总

1)数据分组(group by) —应用函数 (count) —组合结果

2)SQL运行顺序

2.习题

1)查询各科成绩最高和最低的分

解题思路:分组,用group by 对课程分类;应用函数,最高用max()函数,最低用min()函数;最后组合结果。

2)查询每门课程被选修的学生数

解题思路:分组,用group by 对课程分类;应用函数,统计学生数用count()函数。

3)查询男、女生人数

解题思路:先分组,用group by 对性别分组;然后用count()函数统计人数。

三、对分组结果指定条件

1.知识点汇总

1)where只能指定“行”的数据,having可以对“分组后的数据”指定条件。

2)SQL运行顺序

2.练习

1)查询平均成绩大于60分学生的学号和平均成绩

解题思路:平均成绩即为计算每个学生的平均成绩,涉及每个就需要分组;平均成绩大于60分即对分组结果指定条件。

2)查询至少选修两门课程的学生学号

解题思路:对学生学号分组,计算选修课程总数,筛选出课程数量大于等于2的学生学号.

3)查询同名同姓学生名单并统计同名人数

解题思路:先查找姓名相同的学生,每个姓名相同学生的人数。查询结果为姓名和人数,再筛选出同名人数>=2 的结果。

四、用sql解决业务问题

1.知识点汇总

方法:翻译问题—学出分析思路—写出对应的SQL子句

五、对查询结果排序

1.知识点汇总

1)降序(desc):从大到小

升序(asc): 从小到大

2)指定多个排序列名:排列顺序从左到右

3)空值(null)的排序:空值会在查询列开头显示

4)从查询记过中取出指定行:limit

5)SQL运行顺序

2.练习

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

(备注:用红色数字标识了SQL语句运行顺序)

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

解题思路:每门课程即需要用group by 对课程分组,平均成绩即用avg()函数。

(备注:用红色数字标识了SQL语句运行顺序)

六、看懂报错信息

常见错误

1.在group by 或者having 中使用了select里的别名:因为在运行group by 和having
语句的时候是还未执行select语句,所以并不知道别名是什么。

2.在where中使用聚合函数

3.字符串类型的数字

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信