mysql-DQL-多行处理函数-分组group by
一、多行出函数:
- 1、分组函数,使用时必须先分组,在使用如果没有分组,默认整张表格为一组
- 2、分组函数自动忽略null,不需要提前处理null
- 3、分组函数不能直接使用在where语句当中;因为使用where时还没分组
- count(*)统计总行数,数据库中不可能一行都是null
count(具体字段) 该字段下所有不是null的元素总数 - 1、count(): select count(ename) from emp;
- 2、sum():select sum(sal) from emp;
- 3、avg():select avg(sal) from emp;
- 4、max():select max(sal) from emp;
- 5、min():select min(sal) from emp;
二、分组group by
- 在select语句中,有group by 语句的话,slect后面只能跟:参加分组的字段以及分组函数;其他都不能跟
- 案例:计算每个岗位工资和?
- 分析思路:按照工作岗位分组,然后对工资求和?
- select job,sum(sal) from emp group by job;
- 案例:找出每个部门最高薪资;按照编号分组,求每一组最大值?
- select deptno,max(sal) from emp group by deptno;
-
案例:找出每个部门,不同工作岗位的最高薪资?
-
1、分析整个表格: select ename,job,sal,deptno from emp;
2、按照两个字段进行分组:
select job,deptno,max(sal)
from emp
group by job,deptno;
三、having和group by联合使用:having 必须和group by联合使用,不能代替where
找出每个部门最高薪资,要求显示最高薪大于3000?
1、分析先找出每个部门最高薪
select deptno,max(sal) from emp group by deptno;
2、显示大于三千的:having 必须和group by联合使用,不能代替where;
select deptno,max(sal) from emp group by deptno having max(sal)>3000;
思路二、先找出工资大于三千的,在分组
优先考虑where,无法实现时使用having;
select deptno,max(sal) from emp where sal > 3000 group by deptno;
为什么分组函数不能使用在where后面?
因为分组函数在使用的时候必须先分组之后才能使用;where执行的时候,还没有分组,所以where后面不能出现分组函数