#HAVING的使用 (作用:用来过滤数据的)
#之前过滤数据使用的WHERE
#GROUP BY 分组之后 提到HAVING
#练习 查询各个部门中最高的工资比10000高的部门信息
#使用 WHERE
#错误写法
SELECT department_id,MAX(salary)
FROM employees
WHERE MAX(salary)>10000
GROUP BY department_id;
#正确写法
#要求1;如果过滤条件中使用聚合函数,则必须使用having
#错误
SELECT department_id,MAX(salary)
FROM employees
HAVING MAX(salary)>10000
GROUP BY department_id;
#要求2:HAVING 必须声明在group by 的后面
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000;
#没有GROUP BY还可不可以用having
SELECT department_id,MAX(salary)
FROM employees
HAVING MAX(salary)>10000;
#要求3;开发中 我们使用having的前提是SQL中使用group by
#联系:查询部门ID为10,20,30,40这四个部门中最高的工资比10000高的部门信息
#方式1 推荐
SELECT department_id,MAX(salary)
FROM employees
WHERE department_id IN (10,20,30,40)
GROUP BY department_id
HAVING MAX(salary)>10000;
#方式2
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 AND department_id IN (10,20,30,40);
#结论 当过滤条件中有聚合函数时 则过滤条件必须声明在having里
#结论2 当过滤条件中没有聚合函数时 则此过滤条件声明在where中或having中都可以
#建议声明where中
/*
WHERE与having 对比
1 从适用范围来讲 HAVING 的适用更广
2 如果过滤条件中没有聚合函数 这种情况下 where 的执行效率高于having
*/