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行。