分组函数/聚合函数/多行处理函数

分组函数/聚合函数/多行处理函数_聚合函数

注意:分组函数自动忽略空值,不需要手动的加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;

分组函数/聚合函数/多行处理函数_聚合函数_02

count(*)表示取得所有记录,忽略null,为null的值也会取得

1.2取津贴不为null员工数

select count(comm) from emp;

分组函数/聚合函数/多行处理函数_分组函数_03

采用count(字段名称),不会取得为null的记录

1.3取工作岗位的数

select count(distinct job ) from emp;     #distinct 不同种类的

分组函数/聚合函数/多行处理函数_字段_04

2、sum

sum可以取得某一个列的和,null会被忽略,

2.1

取薪水总数

select sum(sal) from emp;

分组函数/聚合函数/多行处理函数_分组函数_05

2.2取津贴总数

select sum(comm) from emp;

分组函数/聚合函数/多行处理函数_分组函数_06

null会被忽略

2.3取得薪水的合计(sal+comm)

select sum(sal+comm) from emp;

分组函数/聚合函数/多行处理函数_字段_07

分组函数/聚合函数/多行处理函数_分组函数_08

从以上结果来看,不正确,原因在于comm字段有null值,所以无法计算,sum会忽略掉不计算有null的行,正确的做法是将comm字段转换成0

select sum(sal+IFNULL(comm, 0)) from emp;

分组函数/聚合函数/多行处理函数_字段_09

3、avg取某一列的平均值

3.1取平均薪水

select avg(sal) from emp;

分组函数/聚合函数/多行处理函数_分组函数_10

4、max

取得某个一列的最大值

4.1取得最高薪水

select max(sal) from emp;

分组函数/聚合函数/多行处理函数_聚合函数_11

4.2取得入职最晚得员工

select max(str_to_date (hiredate, '%Y-%m-%d')) from emp;

分组函数/聚合函数/多行处理函数_分组函数_12

5、min

取得某个一列的最小值

5.1取得薪水最低值

select min(sal) from emp;

分组函数/聚合函数/多行处理函数_字段_13

5.2取得最早入职得员工(可以不使用str_to_date转换

select min(str_to_date(hiredate, '%Y-%m-%d')) from emp;

分组函数/聚合函数/多行处理函数_分组函数_14

6、组合聚合函数

可以将这些聚合函数都放到select中一起使用

select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;

分组函数/聚合函数/多行处理函数_分组函数_15