七、分组函数
7.1 多行处理函数概述
分组函数又被称为多行处理函数。
特点:输入多行,最终输出一行。
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
注意:
分组函数在使用的时候必须先进行分组,然后才能用。
如果你没有对数据进行分组,整张表默认为一组。
7.2 示例
找出最高工资?
mysql> select max(sal) from emp;
+----------+
| max(sal) |
+----------+
| 5000.00 |
+----------+
1 row in set (0.00 sec)
找出最低工资:
mysql> select min(sal) from emp;
+----------+
| min(sal) |
+----------+
| 800.00 |
+----------+
1 row in set (0.00 sec)
计算工资和:
mysql> select sum(sal) from emp;
+----------+
| sum(sal) |
+----------+
| 29025.00 |
+----------+
1 row in set (0.00 sec)
计算平均工资:
mysql> select avg(sal) from emp;
+-------------+
| avg(sal) |
+-------------+
| 2073.214286 |
+-------------+
1 row in set (0.00 sec)
计算员工数量:
mysql> select count(ename) from emp;
+--------------+
| count(ename) |
+--------------+
| 14 |
+--------------+
1 row in set (0.01 sec)
7.3 注意点
7.3.1 分组函数会自动忽略NULL,不需要提前对NULL进行处理
mysql> select sum(comm) from emp;
+-----------+
| sum(comm) |
+-----------+
| 2200.00 |
+-----------+
1 row in set (0.00 sec)
7.3.2 分组函数中count(*) 和 count(具体字段)的区别
count(具体字段):表示统计该字段下所有不为NULL的元素总和。
count(*):统计表当中的总行数。(只要有一行数据count就++,因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数就是有效的。)
# count(具体字段)
mysql> select count(comm) from emp;
+-------------+
| count(comm) |
+-------------+
| 4 |
+-------------+
1 row in set (0.00 sec)
mysql> select comm from emp;
+---------+
| comm |
+---------+
| NULL |
| 300.00 |
| 500.00 |
| NULL |
| 1400.00 |
| NULL |
| NULL |
| NULL |
| NULL |
| 0.00 |
| NULL |
| NULL |
| NULL |
| NULL |
+---------+
14 rows in set (0.00 sec)
# count(*)
mysql> select count(*) from emp;
+----------+
| count(*) |
+----------+
| 14 |
+----------+
1 row in set (0.00 sec)
7.3.3 分组函数不能够直接使用在where子句中
找出比最低工资高的员工信息:
# 下面语句表面上没问题,一运行就报错
mysql> select ename, sal from emp where sal > min(sal);
ERROR 1111 (HY000): Invalid use of group function
7.3.4 所有的分组函数可以组合起来一起用
mysql> 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 |
+----------+----------+----------+-------------+----------+
1 row in set (0.00 sec)