-- HAVING的使用(作用:用来过滤数据)
-- 之前使用的数据过滤是WHERE
-- GROUP BY分组之后,提到HAVING
-- 从需求出发
-- 练习:查询各个部门中最高工资比1W高的部门信息
-- 错误写法
SELECT department_id,MAX(salary)
from employees
where MAX(salary)>10000
GROUP BY department_id;
-- 正确写法
-- 要求:如果过滤条件中使用了聚合函数,则必须使用HAVING;HAVING必须声明在GROUP BY的后面
SELECT department_id,MAX(salary)
from employees
GROUP BY department_id
HAVING MAX(salary)>10000;
-- 以上为规范
-- 思考1:没有 GROUP BY 还能不能用HAVING?
SELECT department_id,MAX(salary)
from employees
HAVING MAX(salary)>10000;
-- 虽然没有 GROUP BY 能运行,但是在实际开发中,我们使用HAVING的前提是SQL中使用了 GROUP BY
-- 练习:查询部门ID为10,20,30,40这4个部门中最高工资比1W高的部门信息
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);
-- 结论1:当过滤条件中有聚合函数时,则此时过滤条件必须声明在HAVING中
-- 结论2:当过滤条件中没有聚合函数时,则此过滤条件声明在WHERE,HAVING中都可以
/*
1.从适用范围上来讲,HAVING的适用范围更广
2.如果过滤条件没有聚合函数,这种情况下,WHERE的执行效率要高于HAVING
*/