五个分组函数
多行处理函数也叫分组函数
多行处理函数的特点:输入多行,最终输出一行。
5个: count 计数 sum 求和 avg 平均值 max 最大值 min 最小值
注意: 分组函数在使用的时候必须先进行分组,然后才能用。 如果你没有对数据进行分组,整张表默认为一组。
找出最高工资? mysql> select max(sal) from emp;
找出最低工资? mysql> select min(sal) from emp;
计算工资和: mysql> select sum(sal) from emp;
计算平均工资: mysql> select avg(sal) from emp;
计算员工数量? mysql> select count(ename) from emp;
计算员工数量? mysql> select count(ename) from emp;
注意:如果count中填的是表达式的话,要加上 or null, 因为 Mysql 中 count() 函数的一般用法是统计字段非空的记录数,利用这个特点来进行条件统计,如果字段是 NULL 就不会统计,但是 false 是会被统计到的
分组函数在使用的时候需要注意哪些?
分组函数自动忽略NULL,你不需要提前对NULL进行处理。
mysql> select sum(comm) from emp;
+-----------+ | sum(comm) | +-----------+ | 2200.00 | +-----------+
分组函数中count(*) 和 count(具体字段) 有什么区别?
count(具体字段):表示统计该字段下所有不为NULL的元素的总数。 count(*):统计表当中的总行数。(只要有一行数据count则++) 每一行记录不可能都为NULL(不存在一行全为null的表),一行数据中有一列不为NULL,则这行数据就是有效的。
mysql> select count(*) from emp; +----------+ | count(*) | +----------+ | 14 | +----------+ mysql> select count(comm) from emp; +-------------+ | count(comm) | +-------------+ | 4 | +-------------+
分组函数不能直接使用在where子句中
找出比最低工资高的员工信息。 select ename,sal from emp where sal > min(sal); 表面上意思感觉是没问题,运行一下发现: ERROR 1111 (HY000): Invalid use of group function
?????????????????????????????????????????????????????????????????????分组函数在使用的时候必须先进行分组,而分组的group by 执行顺序是在where后的,也就是让分组函数 min 先于分组了,所以会报错
所有的分组函数可以组合起来一起用
select sum(sal),min(sal),max(sal),avg(sal),count(*) from emp;
+----------+----------+----------+-------------+----------+ | sum(sal) | min(sal) | max(sal) | avg(sal) | count(*) | +----------+----------+----------+-------------+----------+ | 29025.00 | 800.00 | 5000.00 | 2073.214286 | 14 | +----------+----------+----------+-------------+----------+