HAVING子句用于过滤分组之后的数据。
1、如果过滤条件中使用了聚合函数,或行已经被分组,则必须使用HAVING来替换WHERE。否则,报错。
2、HAVING 必须声明在 GROUP BY 的后面。
# 查询各个部门中最高工资大于10000的部门信息
SELECT department_id, MAX(salary) max_salary
FROM employees
GROUP BY department_id
# 对分组后的数据进行筛选,选出部门中最高工资大于10000的部门
HAVING max_salary > 10000;
开发中,我们使用HAVING的前提是SQL中使用了GROUP BY。
如果没有使用GROUP BY,使用HAVING,则整个表中的所有记录会被当成一组,然后对这一组记录根据HAVING中的条件进行筛选。
SELECT department_id, MAX(salary) max_salary
FROM employees
HAVING max_salary > 10000;
HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。
1、当过滤条件中有聚合函数时,则此过滤条件必须声明在HAVING中。
2、当过滤条件中没有聚合函数时,则此过滤条件声明在WHERE中或HAVING中都可以。但是,建议大家声明在WHERE中。
上述两种方式,方式一的执行效率高于方式二,即WHERE的效率会高于HAVING。