分组函数/聚合函数/多行处理函数
注意:分组函数自动忽略空值,不需要手动的加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
1、count
1.1取所有的员工数
select count(*) from emp;
count(*)表示取得所有记录,忽略null,为null的值也会取得
1.2取津贴不为null员工数
select count(comm) from emp;
采用count(字段名称),不会取得为null的记录
1.3取工作岗位的数
select count(distinct job ) from emp; #distinct 不同种类的
2、sum
sum可以取得某一个列的和,null会被忽略,
2.1
取薪水总数
select sum(sal) from emp;
2.2取津贴总数
select sum(comm) from emp;
null会被忽略
2.3取得薪水的合计(sal+comm)
select sum(sal+comm) from emp;
从以上结果来看,不正确,原因在于comm字段有null值,所以无法计算,sum会忽略掉不计算有null的行,正确的做法是将comm字段转换成0
select sum(sal+IFNULL(comm, 0)) from emp;
3、avg取某一列的平均值
3.1取平均薪水
select avg(sal) from emp;
4、max
取得某个一列的最大值
4.1取得最高薪水
select max(sal) from emp;
4.2取得入职最晚得员工
select max(str_to_date (hiredate, '%Y-%m-%d')) from emp;
5、min
取得某个一列的最小值
5.1取得薪水最低值
select min(sal) from emp;
5.2取得最早入职得员工(可以不使用str_to_date转换)
select min(str_to_date(hiredate, '%Y-%m-%d')) from emp;
6、组合聚合函数
可以将这些聚合函数都放到select中一起使用
select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;