Oracle数据库之 where和having的区别?

select count(*) 人数, avg(p.sal) 平均工资, max(p.sal) 最高工资, job 职位
  from emp p
 group by job
having round(avg(p.sal), 2) < 3000
 order by 平均工资 desc--order 在分组的情况下  排序列也必须是聚合列或者分组列
----where 错误示例
--select count(*) 人数, avg(p.sal) 平均工资, max(p.sal) 最高工资, job 职位
  --from emp p
  --where 
  --round(avg(p.sal), 2) < 3000 --where表示分组之前的条件,where语句之后不能直接跟聚合函数 聚合函数不能作为where的直接条件
 --group by job
 --order by 平均工资;
 ---经典的面试题 where和having的区别?
 ---SQL语句关键字执行的顺序???
--1、from 确定数据源,从数据库的物理文件加载数据块到内存
--2、where 筛选行 产生下一次操作的输入(一个临时的结果集)
--3、group by 分组
--4、having  分组之后的过滤
--5、select  计算select之后的表达式 产生一个别名
--6、order by  最后根据select的结果进行排序 完全可以使用select之后的别名
--完成作业:统计每个职位的平均工资,最高工资,按平均工资排序,
          --但只统计部门编号是10和20的部门,且只统计平均工资小于3000的职位
  select *from emp;
 select  avg(p.sal) 平均工资, max(p.sal) 最高工资,job 职位
   from emp p
   where p.deptno=10 or p.deptno=20
  group by job
  having round(avg(p.sal), 2) < 3000 
  order by 平均工资 desc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值