前面我们介绍了,使用oracle的聚合函数和group by关键字来对结果集合进行分组,这时就有了一个新的问题,例如,我们针对聚合函数那一列需要找到满足条件的那些分组结果。我们可以使用where子句吗?不行,我们需要的是使用having关键字。
例如我们需要找出那些平均工资在$2000以上的部门。使用having关键字的写法是:
Select deptno,avg(sal) avg_sal
From emp
Group by deptno
Having avg(sal) > 2000;
这样就可求出正确的结果
如果你使用的是
Select deptno,avg(sal) avg_sal
From emp
Group by deptno
where avg(sal) > 2000;
将会出现ORA-00934的错误。
关于oracle的having 关键字有一点要说明就是不可以是在having 使用聚合函数的别名,例如
Select deptno,avg(sal) avg_sal
From emp
Group by deptno
Having avg_sal > 2000;
将会出现:ORA-00904: “AVG_SAL”: 无效的标识符的错误。
当然having关键词只能用在处理聚合函数的结果,不可以用在普通列中。
前面给出的例子的结果:
SQL> Select deptno,avg(sal) avg_sal
2 From emp
3 Group by deptno
4 Having avg(sal) > 2000;
DEPTNO AVG_SAL
———- ———-
10 2916.66667
20 2235