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

[打卡]2024.5.7 HAVING

2024-05-07 11:53:30
0
38

-- 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
*/

评论
意见反馈