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后面不能出现分组函数

 

posted @ 2022-04-13 20:01  280887072  阅读(80)  评论(0编辑  收藏  举报