当前位置 : 主页 > 编程语言 > java >

group by和having的区别

来源:互联网 收集:自由互联 发布时间:2022-06-30
@[toc](group by和having的区别) group by 按照某个字段或者某些字段进行分组。 having having是对分组之后的数据进行再次过滤 案例 找出每个工作岗位的最高薪资 select max(sal) from emp group by job;

@[toc](group by和having的区别)

group by

按照某个字段或者某些字段进行分组。

having

having是对分组之后的数据进行再次过滤

案例

找出每个工作岗位的最高薪资

select max(sal) from emp group by job;

注意:分组函数一般都会和group by 联合使用,这也是为什么它被称为分组函数的原因。并且任何一个分组函数(count sum avg max min)都是在group by语句结束之后才会执行的。当一条sql语句没有group by的话,整张表的数据会自成一组。

select ename,max(sal),job from emp group by job;

以上在mysql中,查询结果是有的,但是结果没有意义,在oracle数据库当中会报错。语法错误。oracle的语法规则比mysql语法规则严谨。记住一个规则:当一条语句中有group by 的话,select 后面之后只能跟分组函数和参与分组的字段。

每个工作岗位的平均薪资

select job,avg(sal) from emp group by job;

找出每个部门不同工作岗位的最高薪资。(多个字段联合起来一块分组)

select deptno,job,max(sal) from emp group by deptno,job;

找出每个部门的最高薪资,要求显示薪资大于2500的数据。

  • 找出每个部门的最高薪资

    select max(sal),deptno from emp group by deptno;
  • 找出薪资大于2900

    -- 先分组再过滤,这种方式效率低。 select max(sal) ,deptno from emp group by deptno having max(sal)>2900; -- 先过滤再分组,效率较高。 select max(sql) ,deptno from emp where sal >2900 group by deptno;

    找出每个部门的平均薪资,要求显示薪资大于2000的数据

    这种情况只能用having,因为必须对分组之后的数据进行再次过滤。

  • 找出每个部门的平均薪资

    select deptno,avg(sal) from emp group by deptno;
  • 要求显示薪资大于2000的数据 select deptno ,avg(sal) from emp group by deptno having avg(sal)>2000;

    本文内容到此结束了, 如有收获欢迎点赞

  • 上一篇:【投稿】刀哥:Rust学习笔记 3
    下一篇:没有了
    网友评论