7、分组函数/聚合函数/多行处理函数
|
count |
取得记录数 |
|
sum |
求和 |
|
avg |
取平均 |
|
max |
取最大的数 |
|
min |
取最小的数 |
注意:分组函数自动忽略空值,不需要手动的加where条件排除空值。
select count(*) from emp where xxx; 符合条件的所有记录总数。
select count(comm) from emp; comm这个字段中不为空的元素总数。
注意:分组函数不能直接使用在where关键字后面。
mysql> select ename,sal from emp where sal > avg(sal);
ERROR 1111 (HY000): Invalid use of group function
7.1、count
- 取得所有的员工数
|
select count(*) from emp; |
Count(*)表示取得所有记录,忽略null,为null的值也会取得
2.取得津贴不为null员工数
|
select count(comm) from emp; |
采用count(字段名称),不会取得为null的记录
3.取得工作岗位的个数
|
select count(distinct job ) from emp; #distinct 不同种类的
|
7.2、sum
- Sum可以取得某一个列的和,null会被忽略
- 取得薪水的合计
|
select sum(sal) from emp; |
- 取得津贴的合计
|
select sum(comm) from emp; |
null会被忽略
2.取得薪水的合计(sal+comm)
|
select sum(sal+comm) from emp; |
从以上结果来看,不正确,原因在于comm字段有null值,所以无法计算,sum会忽略掉不计算有null的行,正确的做法是将comm字段转换成0
|
select sum(sal+IFNULL(comm, 0)) from emp; |
7.3、avg
取得某一列的平均值
- 取得平均薪水
|
select avg(sal) from emp; |
7.4、max
取得某个一列的最大值
- 取得最高薪水
|
select max(sal) from emp; |
2.取得最晚入职得员工
|
select max(str_to_date (hiredate, '%Y-%m-%d')) from emp; |
7.5、min
取得某个一列的最小值
- 取得最低薪水
|
select min(sal) from emp; |
- 取得最早入职得员工(可以不使用str_to_date转换)
|
select min(str_to_date(hiredate, '%Y-%m-%d')) from emp; |
7.6、组合聚合函数
可以将这些聚合函数都放到select中一起使用
|
select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp; |