OVER 分析函数

over不能单独使用,要和分析函数:rank(),dense_rank(),row_number(),ntile ,sum(),avg()等一起使用。

rank,dense_rank,row_number和 ntile之间的区别

1      1      1       1
2 2 2 1
2 2 3 2
4 3 4 2
5 4 5 3

   四个分析函数都是按照col1分组内从1开始排序
    row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页
    dense_rank() 是连续排序,两个第二名仍然跟着第三名
    rank()       是跳跃拍学,两个第二名下来就是第四名
  
ntile (N)中的N,把记录强制分成多少段,事例中用的是ntile(3),记录现在分成3段了。
用法:
rank() over([partition by col1] order by col2) 
     dense_rank() over([partition by col1] order by col2) 
     row_number() over([partition by col1] order by col2)
     ntile(n) over([partition by col1] order by col2)       
    其中partition by col1]可省略 order by不可省略
    以上 四个为 分组排序  按照 partition by 的对象col1来分组  再按照  order by 的对象col2来排序
     sum(col1)  over()  按col1 汇总
     sum(col1)  over( order by  col2)  连续求和      按col2 排序 连续求col1的和   (不支持 sql2005 和 2008 ,sql2012 和oracle 支持)
     sum(col1)  over( partition by col2 order by  col3)   分组连续求和     按col2 分组后,按col3 排序 连续求col1的和   (不支持 sql2005 和 2008 ,sql2012 和oracle 支持)
     sum(col1)  over(partition by col2)  分组求和     按col2 分组 求每组col1的和     
     avg (col1)  over()  col1 平均数
     avg (col1)  over(partition by col2)  分组平均       按col2 分组 求col1平均数  
    
    
   
    
 
SQL> select deptno,ename,sal,
2 sum(sal) over (order by ename) 连续求和,
3 sum(sal) over () 总和,                  -- 此处sum(sal) over () 等同于sum(sal)
4 100*round(sal/sum(sal) over (),4) "份额(%)"
5 from emp
6 /

    DEPTNO ENAME             SAL   连续求和       总和    份额(%)
---------- ---------- ---------- ---------- ---------- ----------
        20 ADAMS            1100       1100      29025       3.79
        30 ALLEN            1600       2700      29025       5.51
        30 BLAKE            2850       5550      29025       9.82



原文地址:https://www.cnblogs.com/lishuangjiang/p/3460822.html