一文读懂oracle分组函数

题目:显示部门平均工资的最大值和该部门编号?

1.上面的代码报错的原因?首先要理解sql的执行顺序

    1.通过from子句中找到需要查询的表

    2.通过where 子句进行非分组函数筛选判断

     3.通过croup by子句完成分组操作

     4.通过having子句完成组函数筛选判断

     5.通过select 子句选择显示的列或表达式及组函数

      6.通过order by子句进行排序操作。

2.再来理解上面的错误的sql ,

       1.首先执行了group by  将出师表分成了以部门编号分组的表(例如部门编号10. 20.30, 编号10的部门包含了整个编号为10的编号的所有员工的薪水

       2.再执行select 中的deptno 编号 显示了三个分组(例如 10.20.30)

       3.再执行select  中的avg(sal)建立了每个部门的平均工资的一个新表。(例如:10  2100)

       4.最后再执行max()函数,表示的意思是根据部门,筛选每个部门的最大值,但是上一步执行中形成的表只有平均值,并没有部门中每个员工的具体的薪资,所有sql 执行编译错误。



2.辅助理解  为什么这样写能执行

   步骤解析:

  1.先执行分组,以部门分组,(例如10.20.30)

 2.再执行select中的avg(sal),得出的新表包含的就是每个部门的平均值。例如(10.2000  20. 6000 30 8000)

 3.执行select 中的max(),因为前面并没有包含除了分组函数以外的单独字段,所以得出的结果三个部门平均值中的最大值,所以执行结果如上图所示


3.下面写几种方法得出题目的结果的示例

示例1


示例2



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值