你所在的位置: 首页 > Oracle > OCP >
最新开班 班级 报名状态
8月17日 RHCSA脱产班 已报满
10月13日 RHCE周末班 已报满
11月18日 RHCSA脱产班 已报满
11月2日 RHCSA周末班 已报满
12月2日 红帽专题班 已报满
12月16日 红帽专题班 已报满
12月23日 红帽专题班 已报满
3月03日 RHCSA脱产班 热招中
4月23日 RHCSA脱产班 热招中
7月24日 红帽RHCE暑假 热招中
  • 博赛网络ICT就业班热招中
  • 博赛推出Oracle OCM实战课程

oracle分析函数之windowing(1)

时间:2013-11-20 16:09 作者:Superthink 点击:

oracle分析函数之windowing_clause--rows

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

(责任编辑:Superthink)

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)