数据库的高级查询中,下面关于GROUP BY的HAVING子句为什么报错咧?

数据库的高级查询中,下面关于GROUP BY的HAVING子句为什么报错咧?

SELECT deptno

FROM t_emp 

GROUP BY deptno HAVING COUNT(*)>=2 AND AVG(sal)>=2000 AND hiredate>="1982-01-01";

SELECT deptno

FROM t_emp 

GROUP BY deptno HAVING COUNT(*)>=2 AND AVG(sal)>=2000 AND hiredate>="1982-01-01"

> 1054 - Unknown column 'hiredate' in 'having clause'

> 时间: 0.002s

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,WHERE语句是根据条件进行筛选数据的,所以要查询入职在1982年以后的人数,就需要加上where条件,而不是将其拼接在having语句之后

http://img1.sycdn.imooc.com//climg/6104fea009edb0c304730155.jpg

祝学习愉快~


  • 童真模式启动 提问者 #1

    可课程里的以下代码怎么就成功了,怎么到我写的就不行了呢?

    SELECT deptno,COUNT(*)

    FROM t_emp

    GROUP BY 1 HAVING deptno IN(10,20);


    2021-08-02 20:28:13
  • 同学你好,经测试是可以正确查询数据的,如下:

    http://img1.sycdn.imooc.com//climg/6108aa5b097416e303910258.jpg

    同学这里说的不行,是指运行sql出现错误信息还是数据查询不到?建议同学描述清楚哟

    祝学习愉快~

    2021-08-03 10:31:45
  • 我的意思是:不太清楚为什么我在HAVING子句写了hiredate>="1982-01-01"就报错,而课程中在HAVING中写deptno IN(10,20)就是对的,不是同我写的是一个意思吗?都是非聚集函数、非关联条件、将本该写在WHERE处的写到了HAVING处吗?

    SELECT deptno

    FROM t_emp 

    GROUP BY deptno HAVING COUNT(*)>=2 AND AVG(sal)>=2000 AND hiredate>="1982-01-01";


    2021-08-03 12:04:44
郑奶茶 2021-07-31 12:58:44

HAVING里面不能和字段比较,只能和具体数值比较,hiredate>="1982-01-01"是不允许的

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师