Oracle over()函数是经常用到的函数,下面就为您介绍两个使用Oracle over()函数的例子,希望可以让你对Oracle over()函数有更深的认识。
1.先来一个简单的,注意over(...)条件的不同,
使用sum(sal) over (order by ename)... 查询员工的薪水“连续”求和,
注意over (order by ename)如果没有order by 子句,求和就不是“连续”的,
放在一起,体会一下不同之处:
- SQL> select deptno,ename,sal,
- sum(sal) over (order by ename) 连续求和,
- sum(sal) over () 总和, -- 此处sum(sal) over () 等同于sum(sal)
- 100*round(sal/sum(sal) over (),4) "份额(%)"
- from emp
- /
DEPTNO ENAME SAL 连续求和 总和 份额(%)
- ---------- ---------- ---------- ---------- ---------- ----------
- 20 ADAMS 1100 1100 29025 3.79
- 30 ALLEN 1600 2700 29025 5.51
- 30 BLAKE 2850 5550 29025 9.82
- 10 CLARK 2450 8000 29025 8.44
- 20 FORD 3000 11000 29025 10.34
- 30 JAMES 950 11950 29025 3.27
- 20 JONES 2975 14925 29025 10.25
- 10 KING 5000 19925 29025 17.23
- 30 MARTIN 1250 21175 29025 4.31
- 10 MILLER 1300 22475 29025 4.48
- 20 SCOTT 3000 25475 29025 10.34
- 20 SMITH 800 26275 29025 2.76
- 30 TURNER 1500 27775 29025 5.17
- 30 WARD 1250 29025 29025 4.31
- 已选择14行。
2.Oracle over()函数使用子分区查出各部门薪水连续的总和。注意按部门分区。注意over(...)条件的不同,
- sum(sal) over (partition by deptno order by ename) 按部门“连续”求总和
- sum(sal) over (partition by deptno) 按部门求总和
- sum(sal) over (order by deptno,ename) 不按部门“连续”求总和
- sum(sal) over () 不按部门,求所有员工总和,效果等同于sum(sal)。
- SQL> select deptno,ename,sal,
- sum(sal) over (partition by deptno order by ename) 部门连续求和,--各部门的薪水"连续"求和
- sum(sal) over (partition by deptno) 部门总和, -- 部门统计的总和,同一部门总和不变
- 100*round(sal/sum(sal) over (partition by deptno),4) "部门份额(%)",
- sum(sal) over (order by deptno,ename) 连续求和, --所有部门的薪水"连续"求和
- sum(sal) over () 总和, -- 此处sum(sal) over () 等同于sum(sal),所有员工的薪水总和
- 100*round(sal/sum(sal) over (),4) "总份额(%)"
- from emp
- /
DEPTNO ENAME SAL 部门连续求和 部门总和 部门份额(%) 连续求和 总和 总份额(%)
- ------ ------ ----- ------------ ---------- ----------- ---------- ------ ----------
- 10 CLARK 2450 2450 8750 28 2450 29025 8.44
- KING 5000 7450 8750 57.14 7450 29025 17.23
- MILLER 1300 8750 8750 14.86 8750 29025 4.48
- 20 ADAMS 1100 1100 10875 10.11 9850 29025 3.79
- FORD 3000 4100 10875 27.59 12850 29025 10.34
- JONES 2975 7075 10875 27.36 15825 29025 10.25
- SCOTT 3000 10075 10875 27.59 18825 29025 10.34
- SMITH 800 10875 10875 7.36 19625 29025 2.76
- 30 ALLEN 1600 1600 9400 17.02 21225 29025 5.51
- BLAKE 2850 4450 9400 30.32 24075 29025 9.82
- JAMES 950 5400 9400 10.11 25025 29025 3.27
- MARTIN 1250 6650 9400 13.3 26275 29025 4.31
- TURNER 1500 8150 9400 15.96 27775 29025 5.17
- WARD 1250 9400 9400 13.3 29025 29025 4.31
- 已选择14行。
【编辑推荐】