Having和Where作用是相近的,只不是一个用于普通字段的限定,而Having是用于对聚合后结果的限定。
例:
select pname,count(*) as cnt from ar where count(*) >1 group by pname 是错误的,正确的应该是
select pname,count(*) as cnt from ar group by pname having count(*) >1
看了这个例子应该就明白了吧。
帮助里如是说:
HAVING 子句与 WHERE 子句类似,但只应用于作为一个整体的组(即应用于在 结果集 中表示组的行),而 WHERE 子句应用于个别的行。查询可同时包含 WHERE 子句和 HAVING 子句。在这种情况下:
- 首先将 WHERE 子句应用于表中的个别行或关系图网格中的表结构化对象。只对符合 WHERE 子句条件的行进行分组。
- 然后将 HAVING 子句应用于由分组生成的结果集中的行。只有符合 HAVING 子句条件的组才出现在查询输出中。只能将 HAVING 子句应用于也出现在 GROUP BY 子句或 聚合函数 中的列。