oracle分析函数系列之sum(col1) over(partition by col2 order by col3):实现分组汇总或递增汇总 .

来源:互联网 发布:手机淘宝退货率 编辑:程序博客网 时间:2024/05/22 14:02
语法:sum(col1) over(partition by col2 order by col3 ) 准备数据:   DEPT_ID      ENAME                   SAL1  1000            A                    25002  1000            B                    35003  1000            C                    15004  1000            D                    20005  2000            E                    25006  2000            F                    20007  2000            G                    3500主要有四种情况: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)。 1.有partition by有order by :   在partition by分组下,按照不同的order by col3实现递增汇总..    SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id order by ENAME) AS TOTAL  from  dept_sal  结果:按照部门分组,按名字排序实现递增汇总.       DEPT_ID     ENAME       SAL     TOTAL1 1000       A          3500    35002 1000       B          3500    70003 1000       C          1500    85004 1000       D          2000    105005 2000       E          2500    25006 2000       F          2000    45007 2000       G          3500    8000       如果col3重复会只加总一次(当然在本例中这种写法毫无意义):SQL>> select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id order by SAL) AS TOTAL from dept_sal       DEPT_ID  ENAME    SAL   TOTAL1 1000       C      1500  15002 1000       D      2000  35003 1000       A      3500  105004 1000       B      3500  105005 2000       F      2000  20006 2000       E      2500  45007 2000       G      3500  8000 2.有partition by无order by:  实现分组内所有数据的汇总SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id) AS TOTAL from dept_sal     DEPT_ID   ENAME    SAL   TOTAL1 1000 A 3500 105002 1000 B 3500 105003 1000 C 1500   105004 1000 D 2000 105005 2000 E 2500 80006 2000 F 2000 80007 2000 G 3500 8000  3.无partition by有order by : 直接按order by 字段实现递增汇总SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(order by ENAME) AS TOTAL from dept_sal  DEPT_ID    ENAME     SAL    TOTAL1 1000        A     3500   35002 1000          B      3500   70003 1000          C      1500   85004 1000          D      2000   105005 2000          E      2500   130006 2000          F      2000   150007 2000          G      3500   18500如果order by 的值相同,会进行汇总,但汇总后显示的值会是一样的,如下:SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(order by DEPT_ID) AS TOTAL from dept_sal  DEPT_ID ENAME SAL TOTAL1 1000 A 3500 105002 1000 B 3500 105003 1000 C 1500 105004 1000 D 2000 105005 2000 E 2500 185006 2000 F 2000 185007 2000 G 3500 18500  4.无partition by无order by:  所有数据相加.SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over() AS TOTAL from  dept_sal    DEPT_ID ENAME SAL TOTAL1 1000 A 3500 185002 1000 B 3500 185003 1000 C 1500 185004 1000 D 2000 185005 2000 E 2500 185006 2000 F 2000 185007 2000 G 3500 18500 

原创粉丝点击