当前位置: 代码迷 >> Oracle开发 >> oracle having的用法,该如何解决
  详细解决方案

oracle having的用法,该如何解决

热度:32   发布时间:2016-04-24 06:39:47.0
oracle having的用法
select deptno from scott.emp  group by deptno having sal>2000 这句是报错的难道having后面只能跟聚合涵数
------解决方案--------------------
select语句的执行顺序是先where条件筛选-->再group by聚合-->having条件过滤

因此,首先where条件过滤掉的不会参与聚合操作,但having是将聚合以后的结果再进一步过滤
上面的是逻辑问题,你这里不能使用涉及的是语法问题
having后面跟的要么是参与分组的字段,要么就需要进行聚合,这和select后面字段的展示是一个道理
------解决方案--------------------
还是有问题,你依然写了group By 前面肯定要加聚合函数
------解决方案--------------------

WITH t(a,b,c,d,f) AS
(SELECT   001, 222,0,1,4
 FROM dual
 UNION ALL
 SELECT   001, 222,1,1,35
 FROM dual
 UNION ALL
 SELECT   03, 222,1,1,4
 FROM dual
 UNION ALL
 SELECT   001, 222,0,1,7
 FROM dual
) SELECT a,b FROM t GROUP BY a,b HAVING a>1;
having 后面不能跟没 GROUP BY列
------解决方案--------------------
引用:
select deptno from scott.emp  group by deptno having sal>2000 这句是报错的难道having后面只能跟聚合涵数

像你这个自己肯定没弄清楚自己想要什么结果的。
如果你想要工资大于2000的部门,那么语句是这样写
select deptno from scott.emp  where  sal>2000;
而你那样写肯定会报错:不是group by函数的。having后面是只能跟聚合函数的,如果一定改成你要的那样,就这样写:
select deptno from scott.emp  group by deptno having sum(sal)>2000 ;
但是这样可能违背你写这句代码的初衷。
  相关解决方案