Oracle统计分析函数集,over(partition by..) 的运用
oracle的分析函数over 及开窗函数 数据:
A B C C_SUM ---如果不需要已某个栏位的值分割,那就要用 null eg: 就是将C的栏位值summary 放在每行后面 select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum A B C C_SUM 求个人工资占部门工资的百分比 SQL> select * from salary; NAME DEPT SAL SQL> select name,dept,sal,sal*100/sum(sal) over(partition by dept) percent from salary; NAME DEPT SAL PERCENT 二:开窗函数
sum(nid) over(partition by v1 order by nid)
(2007-05-16 16:22:48)
SQL> select n1,v1,nid,sum(nid) over(order by nid) as sum N1 V1 NID SUM 取nid列的累积和,即下面以emp表为例的按部门“连续”求总和 ================================================================== 按v1分组取nid的和 SQL> select v1,sum(nid) over (partition by v1 order by v1) as sum_nid from t1; V1 SUM_NID 按v1分组取nid的和,并重复行只显示一行 SQL> select distinct * from (select v1,sum(nid) over (partition by v1) as sum_nid from t1); V1 SUM_NID ================================================================== 再以emp为例 使用子分区查出各部门薪水连续的总和。注意按部门分区 over(...)条件的不同 sql> break on deptno skip 1 -- 为效果更明显,把不同部门的数据隔段显示。 SQL> select deptno,ename,sal, DEPTNO ENAME SAL 部门连续求和 部门总和 部门份额 总和 连续求和 总份额 ---------- ---------- ---------- ------------ ---------- ---------- ---------- ---------- ---------- 10 CLARK 2450 2450 8750 28 29025 2450 8.44 KING 5000 7450 8750 57.14 29025 7450 17.23 MILLER 1300 8750 8750 14.86 29025 8750 4.48
FORD 3000 4100 10875 27.59 29025 12850 10.34 JONES 2975 7075 10875 27.36 29025 15825 10.25 SCOTT 3000 10075 10875 27.59 29025 18825 10.34 SMITH 800 10875 10875 7.36 29025 19625 2.76
BLAKE 2850 4450 9400 30.32 29025 24075 9.82 JAMES 950 5400 9400 10.11 29025 25025 3.27 MARTIN 1250 6650 9400 13.3 29025 26275 4.31 TURNER 1500 8150 9400 15.96 29025 27775 5.17 WARD 1250 9400 9400 13.3 29025 29025 4.31 已选择14行。 综合的例子,求和规则有按部门分区的,有不分区的例子 SQL> select deptno,ename,sum(sal) over(partition by deptno order by sal) as sum_sal, DEPTNO ENAME SUM_SAL SUM_DEPT_SAL 20 SMITH 800 9550 30 JAMES 950 20575
来一个逆序的,即部门从大到小排列,部门里各员工的薪水从高到低排列,累计和的规则不变。 SQL> select deptno,ename,sal, DEPTNO ENAME SAL SUM_SAL_ORDER SUM 20 SCOTT 3000 6000 15400 10 KING 5000 5000 25275
|
||