数据操作语言:Having子句

分组查询遇到的困难

  • 查询部门门]平均底薪超过2000元的部门编号
SELECT deptno FROM t_emp
WHERE AVG(sal) >=2000
GROUP BY deptno;
  • 上述例子中由于 WHERE 子句执行顺序优于 GROUP BY 子句,但 WHERE 子句中的聚合函数又得依靠 GROUP BY来进行分组,所以就会导致运行出错

HAVING子句

SELECT deptno FROM t_emp
GROUP BY deptno HAVING AVG(sal) >=2000;
  • HAVING 子句紧跟在 GROUP BY 后面

HAVING子句的用途

  • 查询每个部门中,1982年以后入职的员工超过2个人的部门编号
SELECT deptno FROM t_emp
WHERE hiredate>="1982-01-01 "
GROUP BY deptno HAVING COUNT(*)>=2
ORDER BY deptno ASC;

HAVING子句的特殊用法

  • 按照数字1分组,MySQL会依据SELECT子句中的列进行分组,HAVING子句也可以正常使用
SELECT deptno, COUNT(*) FROM t_emp GROUP BY 1 ;
SELECT deptno, COUNT(*) FROM t_emp GROUP BY 1 HAVING deptno IN(10, 20) ;
  • 1对应就是deptno
  • 上面的例子中deptno IN(10,20)建议写到 WHERE子句中,因为WHERE子句先执行,可以先筛选一波数据
SELECT deptno, empno, COUNT(*)
FROM t_emp WHERE deptno IN(10,20)
GROUP BY 1,2;

在这里插入图片描述

  • 上面例子中GROUP BY后的1,2 对应就是 deptno, empno
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值