Oracle-为什么HAVING子句可以在GROUP BY之前

时间:2019-05-19 10:51:52

标签: oracle group-by having-clause

为什么HAVING clause可以/如何在GROUP BY之前出现

select count(1) from tableA
having id >1
group by id
order by count(1)

我知道HAVING子句可以不包含GROUP BY子句,

但是在定义GROUP BY时为什么不强迫HAVING作为ORDER BY子句呢?

  

Derby按以下顺序处理SelectExpression:

     
      
  • FROM子句
  •   
  • WHERE子句
  •   
  • GROUP BY(或隐式GROUP BY)
  •   
  • HAVING子句
  •   
  • ORDER BY子句
  •   

在所有文档中,它都显示在GROUP BY之后:

GROUP BY WORKDEPT 
HAVING MAX(SALARY) < (SELECT AVG(SALARY)
                      FROM EMPLOYEE
                      WHERE NOT WORKDEPT = EMP_COR.WORKDEPT)

1 个答案:

答案 0 :(得分:1)

因为haveing子句对结果起作用(过滤select的结果)

查询选择只能基于选择,或者如果是查询查询
 结果是在GROUP BY之后产生的  通过这种方式,将HAVING放在查询CLAUSE ..的末尾,就在presentation子句(ORDER BY)之前