为什么/如何HAVING子句可以在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
子句一样被强制放在后面呢?
德比数据库按以下顺序处理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)
编辑 Oreilly 的文章中指出,顺序不重要(但没有解释为什么)
在SELECT语句中,GROUP BY子句和HAVING子句的顺序并不重要。我们可以先指定GROUP BY子句再指定HAVING子句,或者反过来。
我怀疑是因为HAVING子句可以没有GROUP BY子句,所以顺序不强制执行。
HAVING
子句,类似于 MySQL。您的HAVING
子句实际上被评估为一个WHERE
子句。 - Tim BiegeleisenHAVING
子句在执行GROUP BY
之后。 - user7294900id
的限制,这并不重要,因为这也是您正在分组的列。在进行GROUP BY
后抛弃整个组,或在GROUP BY
之前抛弃该组中的所有记录都是一样的。 - Tim Biegeleisenhaving
应该在group by
之后。但是,如果你愿意,你也可以反过来写。 - William Robertson