作用:用来过滤数据。
案例需求:查询各个部门中工资比10000高的部门信息。
错误写法:
#错误的写法:
SELECT department_id,MAX(salary)
FROM employees
WHERE MAX(salary) > 10000
GROUP BY department_id;
注意:
- 如果过滤条件中使用了聚合函数,则必须使用HAVING来替换WHERE。否则,报错。
- HAVING必须声明在GROUP BY的后面
正确写法:
#正确的写法:
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000;
HAVING子句使用规则:
- 行已经被分组。
- 使用了聚合函数。
- 满足HAVING子句中条件的分组将被显示。
- HAVING不能单独使用,必须要跟GROUP BY一起使用。
案例需求:查询部门id为10,20,30,40这4个部门中最高工资比10000高的部门信息
# 方法一:
SELECT department_id,MAX(salary)
FROM employees
WHERE department_id IN (10,20,30,40)
GROUP BY department_id
HAVING MAX(salary) > 10000;
# 方法二:
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000 AND department_id IN (10,20,30,40);
方法一比方法二效率更高。
结论: