美文网首页
sql having

sql having

作者: Vergil_wj | 来源:发表于2021-06-22 07:18 被阅读0次

    对分组之后的信息进行过滤

    输出部门平均工资大于2000的部门编号、部门平均工资

    select deptno,avg(sal) as "平均工资"
        from emp
        group by deptno
        having avg(sal) > 2000
    

    把姓名不包含 A 的所有员工按照部门编号分组;
    输出部门平均工资大于2000的部门编号、部门平均工资。

    select deptno,avg(sal) as "平均工资"
        from emp
        where ename not like "%A%"  -- 对原始记录过滤
        group by deptno
        having avg(sal) > 2000  -- 对分组之后的数据过滤
    

    错误写法:

    select deptno,avg(sal) as "平均工资"
        from emp
        group by deptno
        having avg(sal) > 2000  
        where ename not like "%A%" 
    
    • where 和 having 参数的顺序不能变。

    having 和 where 异同

    相同: 都是对数据进行过滤,只保留有效数据。

    不同:
    1、where 是对原始数据过滤,having 是对分组之后的数据进行过滤;
    2、where 必须写在 hvaing 前面,顺序不可颠倒,否则运行出错;

    错误代码:

    select deptno,avg(sal)
        from emp
        where avg(sal) > 2000
        group by deptno
    

    where 应该对源数据进行操作,不能使用分组函数实例。先执行 where 后执行 group by,所以执行 where 时还没有对 emp 表进行分组,因此编译时会报错。

    相关文章

      网友评论

          本文标题:sql having

          本文链接:https://www.haomeiwen.com/subject/hwekyltx.html