首页 小组 文章 相册 留言本 用户 搜索 我的社区 在线学堂 商城 购物车 支付钱包

NNNNN

2024-05-07 10:08:54
0
103


#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

*/
评论
意见反馈