oracle高级函数-分析函数

       什么是oracle的分析函数呢,我相信大家一定见过这样的语法“Analytic_function(arg1,arg2,...) OVER(analytic_clause)” ,一般带个over什么的语法。

       oracle官方的语法解释就是

       

     如果非要有个例子:

      sum(sal) over (partition by deptno order by ename RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) new_alias

         “RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW”是默认的windowing_clause。从第一行到当前行(如果over里面加上order by 根据升序或者降序不同,这个第一行定义也不一样。就像我们觉得周日是一周最后一天,老外认为周日是一周第一天)

     通过这个例子,我相信大家应该能对号入座了。

 

     其实光说这个也没有什么例子,今天我就通过一个例子给大家介绍下。先看看测试环境吧

    

     测试就要oracle带的例子好了。先看看这个能写出的语法

     

SELECT
  t.empno,t.ename,t.deptno,t.hiredate,t.sal,
  SUM(t.sal) OVER (PARTITION BY t.deptno ORDER BY t.hiredate) sum_sal1,
  SUM(t.sal) OVER (PARTITION BY t.deptno ORDER BY t.hiredate DESC) sum_sal2,  
  SUM(t.sal) OVER (PARTITION BY t.deptno ) sum_sal7,
  SUM(t.sal) OVER ( ) sum_sal8
  --FROM emp t order by t.deptno,t.hiredate DESC; 这个where后面就先不要加上order by了,加上效果有变化
  FROM emp t order ;
      

     一:sun_sal1和sun_sal2说明

     

     sum_sal1:计算当第一行到当前行之间所有sal总和

     sum_sal2:计算最后一行到当前行之间所有sql总和。加上"ORDER BY t.hiredate DESC" Oracle认为最后原来的最后 

                   一行就是第一行了。(RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 还是"第一

                   行"到当前行,第一的定义变化了)

     这个2列语法上面唯一的差别就是排序不一样,一个走默认 一个走desc

     

     二:sum_sal7和sum_sal8

     

     sum_sal7:没有over里面的order by了,计算的是组的总和,整个depe_id=20的sal总和

     sum_sal8:over里面什么也没有,计算真个结果集的sal总和

     

    

     

     

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值