原文链接:https://blog.csdn.net/qq_34721292/article/details/90551013

    分组查询中,出现在group by 后面的原始列,才能出现在select后面
    –没有出现在group by后面的列,想在select 后面出现必须加上聚合函数。
    –聚合函数有一个特性,可以把多行记录变成一个值

    1. --分组查询
    2. --查询出每个部门的平均工资
    3. --分组查询中,出现在group by 后面的原始列,才能出现在select后面
    4. --没有出现在group by后面的列,想在select 后面出现必须加上聚合函数。
    5. --聚合函数有一个特性,可以把多行记录变成一个值
    6. select e.deptno,avg(e.sal)
    7. from emp e
    8. group by e.deptno;

    Oracle分组查询关于where、group by 、having的使用 - 图1

    1. --查询出平均工资高于2000的部门
    2. select e.deptno,avg(e.sal)
    3. from emp e
    4. group by e.deptno
    5. having avg(e.sal)>2000;

    Oracle分组查询关于where、group by 、having的使用 - 图2

    ===========================================
    Oracle分组查询关于where、group by 、having的使用 - 图3
    但下面不行:
    Oracle分组查询关于where、group by 、having的使用 - 图4

    –非子查询所有条件都不能用别名来判断

    1. --比如下面的条件也不能使用别名当条件
    2. select ename,sal s from emp where sal>1500;
    1. --查询出每个部门工资高于800的员工的平均工资
    2. select e.deptno,avg(e.sal)
    3. from emp e
    4. where e.sal>800
    5. group by e.deptno;

    Oracle分组查询关于where、group by 、having的使用 - 图5

    —where是过滤分组前的数据,having是过滤分组后的数据
    –表现形式:where必须在group by 之前,having是在group by之后

    1. ---查询出每个部门工资高于800的员工的平均工资
    2. --然后再查询出平均工资高于2000的部门
    3. select e.deptno,avg(e.sal)
    4. from emp e
    5. where e.sal>800
    6. group by e.deptno
    7. having avg(e.sal)>2000;

    Oracle分组查询关于where、group by 、having的使用 - 图6