6. 分组函数
分组函数又称为多行处理函数。
多行处理函数的特点:输入多行,最终输出一行。
注意:1. 分组函数在使用的时候必须先进行分组,然后才能用。如果没有对数据进行分组,整张表默认为一组。
2. 分组函数自动忽略空值,不需要手动的加 where
条件排除空值。
select count(*) from emp where xxx;
符合条件的所有记录总数。
select count(comm) from emp;
comm 这个字段中不为空的元素总数。
3. 分组函数不能直接使用在 where
关键字后面。
select ename,sal from emp where sal > avg(sal);
select count(*) from emp;
count(*)
表示取得所有记录,忽略 null,为 null 的值也会取得。select count(comm) from emp;
count(字段名称)
,不会取得为 null 的记录。 sum
可以取得某一个列的和,null 会被忽略。
select sum(sal) from emp;
select sum(comm) from emp;
select sum(sal+comm) from emp;
comm
字段有 null 值,所以无法计算,sum
会忽略掉,正确的做法是将 comm
字段转换成 0。select sum(sal+IFNULL(comm, 0)) from emp;
select avg(sal) from emp;
select max(sal) from emp;
select max(str_to_date(hiredate, '%Y-%m-%d')) from emp;
select min(sal) from emp;
select min(str_to_date(hiredate, '%Y-%m-%d')) from emp;
第一点:分组函数自动忽略NULL,你不需要提前对NULL进行处理。
select sum(comm) from emp;
select count(comm) from emp;
select avg(comm) from emp;
第二点:分组函数中count(*)
和count(具体字段)
有什么区别?
count(*)
:统计表当中的总行数。(只要有一行数据count则++,因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。)
count(具体字段)
:表示统计该字段下所有不为NULL的元素的总数。
select count(*) from emp;
select count(comm) from emp;
第三点:分组函数不能够直接使用在where子句中。
找出比最低工资高的员工信息:select ename,sal from emp where sal > min(sal);
在where
子句后使用分组函数,会出现错误。
第四点:所有的分组函数可以组合起来一起用。
select sum(sal),min(sal),max(sal),avg(sal),count(*) from emp;
可以将这些聚合函数都放到 select
中一起使用:select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp
。