正如我到处阅读的内容,HAVING子句和WHERE子句执行某种类似的功能,但是WHERE子句条件在分组之前适用,而HAVING在之后分组。这到底是什么意思?如果我不事先将它们分组怎么办?我能得到相同的结果吗?
答案 0 :(得分:0)
大多数数据库在没有having
的情况下并不真正支持group by
。因此,两者之间的区别确实很简单。您可以在having
中使用聚合函数。它们会导致where
中的语法错误。真的很简单。不能犯错误。
我猜您正在使用MySQL。该数据库扩展了having
的使用。它允许它在非聚合查询中使用,这是非常不规范的。这样,它允许在条件中使用表别名。
因此会产生错误(假设x.foo
不是列):
select x.col as foo
from x
where foo = 3;
但是,这在MySQL中是 :
select x.col as foo
from x
having foo = 3;
在其他数据库中,这将生成语法错误。
这很方便。在大多数数据库中,您将使用子查询(在MySQL中仍然可以执行)或CTE(在MySQL 8.0中现已允许)。