想达到什么效果?
为什么不用where,要用having?

解决方案 »

  1.   

    用where是可以,但为什么不能用having,加了聚合涵数就可以,想知道原因
      

  2.   

    select语句的执行顺序是先where条件筛选-->再group by聚合-->having条件过滤因此,首先where条件过滤掉的不会参与聚合操作,但having是将聚合以后的结果再进一步过滤
    上面的是逻辑问题,你这里不能使用涉及的是语法问题
    having后面跟的要么是参与分组的字段,要么就需要进行聚合,这和select后面字段的展示是一个道理
      

  3.   

    还是有问题,你依然写了group By 前面肯定要加聚合函数
      

  4.   


    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列
      

  5.   

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