MySQL基础学习——多行处理函数(五)

204 阅读2分钟

五个分组函数

多行处理函数也叫分组函数

多行处理函数的特点:输入多行,最终输出一行。

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 |
+----------+----------+----------+-------------+----------+