
SQL汇总分析学习大纲

一、汇总分析
函数的功能

五个常用的汇总函数

函数的三个特点
1. 具备某个功能,方便使用函数的人实现特定的功能
2. 函数有输入端,用于接收使用它的人输入的数据,输入的数据叫函数的参数
3. 函数有输出端,用于返回处理完的数据,输出的数据叫返回值

count函数
求某列的行数。可以输入某列数据即可返回该列的行数。count函数可以对任何类型的数据进行计算

- count函数输入值是列
如:【select count(教师姓名) from teacher;】即可返回结果count(教师姓名)这一列有3行(count函数如果输入的是列名,那么返回的结果是非null值的行数。同理,如果输入的是列名,其他汇总函数在计算时也会提前将null值排除在外再计算)

- count函数输入值是*
如:【select count(*) from teacher;】星号(*)代表全部行,包括空值,因此输出的结果count(*)有4行

- count函数计算非重复值
如:【select count(distinct 姓名) from student;】其他汇总函数也适用,即在列名前加上distinct即可计算非重复值

sum函数
如:【select sum(成绩) from score;】sum函数只能对数值类型的列计算,否则会报错

avg函数
如:【select avg(成绩) from score;】avg函数只能对数值类型的列计算,否则会报错

max函数和min函数
如:【select max(成绩),min(成绩) from score;】max和min函数可以对任何类型的数据进行计算

二、分组
在SQL中运用group by子句按某个条件对数据进行分组

分组函数经常与汇总函数一起使用,运用了以下这种数据分析的通用模板分析方法,由三部分组成:
1. 对数据按某种规则进行分组。如按性别将学生分为男女两组
2. 应用函数。在前一步分组的数据上进行操作,如求平均值等,因为是分组计算,因此每个组都会有对应的计算结果
3. 组合结果。将第二步每一组计算的结果总结到同一个表中

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

SQL运行顺序:SQL子句的书写顺序与SQL的运行顺序不同。

- 1. from子句指定从哪张表中查找数据

- 2. where子句查询符合条件的行

- 3. group by子句对第二步查询出的数据进行分组

- 4. select子句对分组后的每个组应用函数并组合结果,同时筛选出指定的列

SQL运行顺序总结:第一步先按书写顺序运行蓝框里的子句;第二步在运行select子句。

三、对分组结果指定条件
having函数
where子句只能指定行的条件,而having子句可以指定分组后的条件


SQL运行顺序

四、用SQL解决业务问题

案例1





案例2



总结

五、对查询结果排序
order by函数
对查询结果排序

desc——降序,从大到小
asc——升序,从小到大

- 指定多个排序列名
按order by从左到右的列名进行排序。先按第一个列名进行排序,如果该列存在相同的值,这些相同的值再按第二个列名进行排序,以此类推

- 空值null的排序
使用含有空值null的列进行排序时,空值null会在查询结果的开头显示。当数据量很大时,可以按照这种方法查看空值情况。

SQL运行顺序

limit函数
如果查询结果数据量很大,而只想返回部分结果,而不需要全部显示,可以使用limit函数。limit函数的作用就是从查询结果取出指定行。

SQL运行结果

六、看懂SQL报错信息
常见错误1:在group by或having子句里使用了select里的别名
having子句先运行,select子句后运行,因此无法识别“平均成绩”这个别名。因此在group by子句和having子句里是无法使用select里的别名的。

常见错误2:在where子句中使用了聚合函数

常见问题1:字符串类型的数字
这一列数字以字符串类型存放,因此在排序或计算最大/小值时都是按照字符串类型的顺序进行排序,因此显示的最大值是99。解决方法就是先将这一列数字的类型改为数字类型再进行后续操作。

常见问题2:SQL转义字符
在字符串中,有些符号有特殊含义,比如Eugene O'Neill中的单引号('),使用两个单引号('')表示字符串里面的单引号('),也就是转义字符。这个例子里,Eugene O'Neill,在sql里这么写'Eugene O''Neill'

技巧1:运算符in

七、总结

八、练习
Chestnut-J:SQL汇总分析—练习(三)zhuanlan.zhihu.com