Some analytic functions allow the windowing_clause. In the listing of analytic functions at the end of this section, the functions that allow the windowing_clause are followed by an asterisk (*)。--有些分析函数允许windowing_clause,在附录中,带*号的分析函数可以用windowing_clause,可以看到很多是聚合函数。

rows代表物理行,range代表逻辑偏移,我们来做下试验rows:

--unbounded preceding and unbouned following针对当前所有记录的前一条、后一条记录,也就是表中的所有记录
  --unbounded:不受控制的,无限的
  --preceding:在...之前
  --following:在...之后

SELECT E.DEPTNO,
       E.EMPNO,
       E.ENAME,
       E.SAL,
       LAST_VALUE(E.SAL) 
       OVER(PARTITION BY E.DEPTNO 
            ORDER BY E.SAL  
            ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) MAX_SAL
  FROM EMP E;

DEPTNO      EMPNO ENAME             SAL    MAX_SAL
---------- ---------- ---------- ---------- ----------
        10       7934 MILLER           1300       5000
        10       7782 CLARK            2450       5000
        10       7839 KING             5000       5000
        20       7369 SMITH             800       3000
        20       7876 ADAMS            1100       3000
        20       7566 JONES            2975       3000
        20       7788 SCOTT            3000       3000
        20       7902 FORD             3000       3000
        30       7900 JAMES             950       2850
        30       7654 MARTIN           1250       2850
        30       7521 WARD             1250       2850
        30       7844 TURNER           1500       2850
        30       7499 ALLEN            1600       2850
        30       7698 BLAKE            2850       2850

--ROWS BETWEEN unbounded preceding AND current row  是指第一行至当前行的汇总  
SELECT EMPNO,
       ENAME,
       DEPTNO,
       SAL,
       SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) max_sal
  FROM EMP;

EMPNO ENAME          DEPTNO        SAL    MAX_SAL
---------- ---------- ---------- ---------- ----------
      7782 CLARK              10       2450       2450
      7839 KING               10       5000       7450
      7934 MILLER             10       1300       8750
      7876 ADAMS              20       1100       1100
      7902 FORD               20       3000       4100
      7566 JONES              20       2975       7075
      7788 SCOTT              20       3000      10075
      7369 SMITH              20        800      10875
      7499 ALLEN              30       1600       1600
      7698 BLAKE              30       2850       4450
      7900 JAMES              30        950       5400
      7654 MARTIN             30       1250       6650
      7844 TURNER             30       1500       8150
      7521 WARD               30       1250       9400

 --ROWS BETWEEN current row AND unbounded following 指当前行到最后一行的汇总
 SELECT EMPNO,
        ENAME,
        DEPTNO,
        SAL,
        SUM(SAL) OVER(PARTITION BY DEPTNO
                      ORDER BY ENAME
                      ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) max_sal
   FROM EMP;

EMPNO ENAME          DEPTNO        SAL    MAX_SAL
     ------ ---------- ---------- ---------- ----------
      7782 CLARK              10       2450       8750
      7839 KING               10       5000       6300
      7934 MILLER             10       1300       1300
      7876 ADAMS              20       1100      10875
      7902 FORD               20       3000       9775
      7566 JONES              20       2975       6775
      7788 SCOTT              20       3000       3800
      7369 SMITH              20        800        800
      7499 ALLEN              30       1600       9400
      7698 BLAKE              30       2850       7800
      7900 JAMES              30        950       4950
      7654 MARTIN             30       1250       4000
      7844 TURNER             30       1500       2750
      7521 WARD               30       1250       1250

--注意ROWS BETWEEN 1 preceding AND current row 是指当前行的上一行(rownum-1)到当前行的汇总
 SELECT EMPNO,
        ENAME,
        DEPTNO,
        SAL,
        SUM(SAL) OVER(PARTITION BY DEPTNO
                      ORDER BY ENAME ROWS
                      BETWEEN 1 PRECEDING AND CURRENT ROW) max_sal
   FROM EMP;

EMPNO ENAME          DEPTNO        SAL    MAX_SAL
     ------ ---------- ---------- ---------- ----------
      7782 CLARK              10       2450       2450
      7839 KING               10       5000       7450
      7934 MILLER             10       1300       6300
      7876 ADAMS              20       1100       1100
      7902 FORD               20       3000       4100
      7566 JONES              20       2975       5975
      7788 SCOTT              20       3000       5975
      7369 SMITH              20        800       3800
      7499 ALLEN              30       1600       1600
      7698 BLAKE              30       2850       4450
      7900 JAMES              30        950       3800
      7654 MARTIN             30       1250       2200
      7844 TURNER             30       1500       2750
      7521 WARD               30       1250       2750

 --注意ROWS BETWEEN 1 preceding AND 1 following 是指当前行的上一行(rownum-1)到当前行的下两行(rownum+2)的汇总
 SELECT EMPNO,
        ENAME,
        DEPTNO,
        SAL,
        SUM(SAL) OVER(PARTITION BY DEPTNO
                      ORDER BY ENAME
                      ROWS BETWEEN 1 PRECEDING AND 2 FOLLOWING) max_sal
   FROM EMP;

EMPNO ENAME          DEPTNO        SAL    MAX_SAL
     ------ ---------- ---------- ---------- ----------
      7782 CLARK              10       2450       8750
      7839 KING               10       5000       8750
      7934 MILLER             10       1300       6300
      7876 ADAMS              20       1100       7075
      7902 FORD               20       3000      10075
      7566 JONES              20       2975       9775
      7788 SCOTT              20       3000       6775
      7369 SMITH              20        800       3800
      7499 ALLEN              30       1600       5400
      7698 BLAKE              30       2850       6650
      7900 JAMES              30        950       6550
      7654 MARTIN             30       1250       4950
      7844 TURNER             30       1500       4000
      7521 WARD               30       1250       2750

--注意ROWS BETWEEN 1 preceding AND 1 following 是指当前行的上一行(rownum-1)到当前行的下两行(rownum+1)的汇总
 SELECT EMPNO,
        ENAME,
        DEPTNO,
        SAL,
        SUM(SAL) OVER(PARTITION BY DEPTNO
                      ORDER BY ENAME
                      ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) max_sal
   FROM EMP;

EMPNO ENAME          DEPTNO        SAL    MAX_SAL
    ------ ---------- ---------- ---------- ----------
      7782 CLARK              10       2450       7450
      7839 KING               10       5000       8750
      7934 MILLER             10       1300       6300
      7876 ADAMS              20       1100       4100
      7902 FORD               20       3000       7075
      7566 JONES              20       2975       8975
      7788 SCOTT              20       3000       6775
      7369 SMITH              20        800       3800
      7499 ALLEN              30       1600       4450
      7698 BLAKE              30       2850       5400
      7900 JAMES              30        950       5050
      7654 MARTIN             30       1250       3700
      7844 TURNER             30       1500       4000
      7521 WARD               30       1250       2750

附录:

AVG *
CORR *
COVAR_POP *
COVAR_SAMP *
COUNT *
CUME_DIST
DENSE_RANK
FIRST
FIRST_VALUE *
LAG
LAST
LAST_VALUE *
LEAD
MAX *
MIN *
NTILE
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
RANK
RATIO_TO_REPORT
REGR_ (Linear Regression) Functions *
ROW_NUMBER
STDDEV *
STDDEV_POP *
STDDEV_SAMP *
SUM *
VAR_POP *
VAR_SAMP *
VARIANCE *

oracle分析函数之windowing_clause--rows的更多相关文章

  1. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  2. [转]oracle分析函数Rank, Dense_rank, row_number

    oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number)   目录 ==================== ...

  3. [转]oracle 分析函数over

      oracle 分析函数over 分析函数(OVER) 目录: =============================================== 1.Oracle分析函数简介 2. O ...

  4. oracle分析函数与over()(转)

    文章参考:http://blog.csdn.net/haiross/article/details/15336313 -- Oracle分析函数入门-- 分析函数是什么? 分析函数是Oracle专门用 ...

  5. oracle分析函数技术详解(配上开窗函数over())

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  6. Oracle分析函数——函数列表

    --------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...

  7. Oracle分析函数大全

    分析函数又叫开窗函数,OLAP函数等,因为有人问我用过开窗函数没,呵,什么是开窗函数,从来没听过,难道是分析函数么.哈哈,最后还真是分析函数哦!用过的东西别名也应该知道,赶上这么个事,就剽窃一眼Ora ...

  8. Oracle分析函数Over()

    一.Over()分析函数 说明:聚合函数(如sum().max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录.若想对于某组返回多行记录,则需要使用分析函数. 1.rank( ...

  9. Oracle分析函数巧妙使用

    在 Oracle中使用Sql必须弄懂分析函数 Oracle开发专题之:分析函数(OVER) 1 Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) 6 Or ...

  10. Oracle分析函数(一)

    (一)分析函数语法 function_name(<argument>,<argument>...) over(<partition by clause><or ...

随机推荐

  1. 尝试 TFS Express 2012.3

    之前一直使用SVN做版本管理,但是只能管理代码.之前的一份工作,只用了TFS来管理,可以将任务与代码集成管理,很是方便,只是安装太过于繁琐,现在的公司人少,不想费那么多事. 最关键的,就是安装TFS需 ...

  2. jquery自定义插件-参数化配置多级菜单导航栏插件

    1 自定义菜单导航栏插件的必要性 看图说话,下面是利用自定义的菜单导航栏插件simpleMenu创建的网站导航示例: 插件默认提供的是如上图的导航栏样式,即一二级菜单为横向分布:三四级菜单为纵向分布. ...

  3. hihocoder 1500 EL SUENO

    树上背包. 简单的树形$dp$,计算出摧毁每一个节点所需的最小费用,背包即可. #include<bits/stdc++.h> using namespace std; struct X ...

  4. Hibernate 对象的生命周期及CRUD操作

    对象状态及生命周期 1.Transient(瞬时状态):new的对象为瞬时态 session中没有数据,数据库中没有数据. 2.Persistent(持久状态):被session管理的对象为持久状态, ...

  5. PHP_EOL 换行符

    换行符unix系列用 \nwindows系列用 \r\nmac用 \rPHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 如:  <?php    echoPHP_EOL;    ...

  6. div块元素垂直水平居中方法总结

    1.已知块级元素的宽和高,使用绝对定位+外边距设定水平垂直居中. 父元素position:relative,子元素position:absolute;top:50%;left:50%;margin-t ...

  7. bzoj 1834: [ZJOI2010]network 网络扩容 -- 最大流+费用流

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一 ...

  8. 20172333 2017-2018-2 《Java程序设计》第11周学习总结

    20172333 2017-2018-2 <Java程序设计>第11周学习总结 教材学习内容 对于Android Studio的安装以及对安卓的一些基本组成,比如说四大组件Acticity ...

  9. bzoj 2957 楼房重建 分块

    楼房重建 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=29 ...

  10. 利用BusyBox ~私人定制 My LINUX~

    前言 我在今天在这里跟大家详细地探讨一下Linux系统的定制过程和实现例如.用户能够远程登录:和Nginx能够稳定地运行在我们私人定制的LINUX系统上.一步一步从头开始定制属于我们自己的系统. 正文 ...