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

[打卡]having的使用

2024-05-07 11:49:28
0
27

#HAVING的使用(作用:用来过滤数据)

#之前过滤数据用的是where

#GROUP BY分组之后,提到having

#从需求出发

#练习1:查询各个部门中最高工资比10000高的部门信息
#WHERE的写法(错
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;

#练习2:思考没有GROUP BY还能不能用HAVING?
SELECT department_id,MAX(salary)
from employees
HAVING MAX(salary) > 10000;
-- 没有GROUP BY能运行having,但是在实际开发中,使用having的前提是SQL中使用了group by

#练习3:查询部门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);
-- 结论一:当过滤条件中有聚合函数时,则此过滤条件必须声明在having中
-- 结论二:当过滤条件中没有聚合函数时,则此过滤条件声名在WHERE中或HAVING中都可以,但是建议大家声名在WHERE中

/*
WHERE 与 HAVING的对比

1 从适用范围上来讲,HAVING的适用范围更广

2如果过滤条件中没有聚合函数:这种情况下,WHERE的执行效率要高于HAVING
*/








评论
意见反馈