关于HAVING

关于HAVING

http://img1.sycdn.imooc.com//climg/5ed4ac0f099169db06480162.jpg

老师您好,想找出1982年入职且人数超过两个的部门,为什么这样写不行呢?

HAVING后面的条件必须与GROUP BY后面的参数有关么

正在回答 回答被采纳积分+1

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

1回答
好帮手慕笑蓉 2020-06-01 16:33:39

同学,你好。

  1. 同学的代码运行报错:是因为select语句中没有hiredate字段,按如下更改不会报错:

    http://img1.sycdn.imooc.com//climg/5ed4baf209992dd812470056.jpg

    但查询出的结果却不正确,这是因为分好组的数据中没有1982年入职的人:

    http://img1.sycdn.imooc.com//climg/5ed4bc240961c09f06860225.jpg

  2. HAVING后面的条件必须与GROUP BY后面的参数有关。查询语句中如果含有group by子句,那么select语句中的内容必须要遵守:select语句可以包含聚合函数,或者group by子句的分组列,其余内容均不可出现在select语句中

如果解决了你的疑惑,请采纳,祝学习愉快~ 

  • 为什么改过来之后会没有数据呢? 是先执行GROUP BY 语句给结果分组,然后再执行HAVING选出最后的结果的吧
    2020-06-01 19:17:56
  • 同学,你好。是先执行GROUP BY 语句给结果分组,然后再执行HAVING选出最后的结果。没有数据是因为GROUP BY 语句执行后的结果就只有deptno的组信息,而hiredate字段的信息本就不在分组列,是通过select加上去的,没有包含全部的hiredate信息。 祝学习愉快~
    2020-06-02 09:57:29
  • 那老师有可行的改进办法么,使用GROUP BY 和HAVING语句完成这条命令
    2020-06-02 10:03:26
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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