让我们暂时搁置GROUP BY.在普通查询中(没有GROUP BY),语义上有什么区别? this answer为什么起作用? (将别名放在HAVING子句中,而不是WHERE中)
解决方法:
HAVING在汇总行上进行操作-在应用GROUP BY之前,WHERE在整个表上进行操作. (您不能将GROUP BY放在一边,HAVING是保留供GROUP BY使用的子句-省略GROUP BY不会更改幕后发生的隐式操作).
还需要注意的是,因此,WHERE可以使用索引而HAVING不能使用索引. (在超级琐碎的未分组结果集中,理论上可以使用索引进行HAVING,但我从未见过以这种方式实际实现查询优化器).