多行处理函数又叫分组函数:
1、count:计数
2、sum:求和
3、avg:平均值
4、max:最大值
5、min:最小值
多行处理函数的特点:
1)输入多行,最终输出的结果为1行。
2)分组函数自动忽略null
现在有员工表信息如下:
员工表
select count(comm) from emp; //结果:4
可以看出一共有14行记录,但是count(comm)的时候结果等于4,说明count函数自动过滤掉为null的comm字段。
3)有null参数的数学运算结果一定为null
还是上面员工表的信息,我们查询每个员工的年薪,年薪=(工资+补贴)* 12 也就是:
(sal + comm) 12;
select ename , (sal + comm) * 12 as yealsal from emp;
员工年薪
从结果中我们可以看到,只要别贴comm为null的,查询出来的年薪也是等于null,这也就说明了只要有null参与的数学运算,结果一定为null。
这个时候我们就需要一个单行处理函数来解决这样的问题:ifnull(‘为null的字段’ , ‘为null的时候当做什么来处理’),所以sql语句可以改成如下:
select ename , (sal + ifnull(comm,0)) * 12 as yealsal from emp;
员工年薪
最后我们再来看一个需求来证明:分组函数自动忽略null
计算所有员工的别贴comm总和:select sum(comm) from emp;
在comm别贴字段中,含有为null的值,所有查询的结果应该为null,我们执行并查看结果:
员工补贴总和
我们发现结果并不是null,而是自动将为null的值过滤掉了,所以我们再次证明了分组函数会自动过滤null值。