select c.dname,avg(a.sal)
from scott.emp a,scott.dept c
where a.deptno=c.deptno
group by c.dname
having avg(a.sal)>2000;
与
select c.dname,avg(a.sal)
from scott.emp a,scott.dept c
where a.deptno=c.deptno
having avg(a.sal)>2000
group by c.dname;
输出结果是一致的,
执行顺序是
select -- 5 from -- 1 where -- 2 group by -- 3 having -- 4 order by -- 6
规范书写如上描述。
了解执行顺序有利于提高SQL性能
记住SQL写法的顺序:S-F-W-G-H-O,即select-from-where-group by-having-order by
查询语句的执行存在先后顺序,具体的执行顺序为:FROM→WHERE→GROUP BY→HAVING→SELECT →ORDER BY
而且 having语句的作用是指出筛选条件,将符合条件的组显示出来。
因此,即使语句的先后顺序对最终查询结果的显示并没有影响,但having语句既然是作为分组的筛选条件,最好也是出现在group by 语句之后。
刚学oracle 半个月,个人理解,望互相指教,谢谢。
having和where本身是一个类型的函数可以通用 ,便于区分 先分组过滤和先过滤和后分组 建议 having写到groupby后面
我刚试了一下 结果一下 所以应该没有要求