• oracle累积求和分析函数sum over的使用


    oracle sum()over函数的使用

    over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。 

    over函数的参数:over(partition by columnname1 order by columnname2) 

    含义,按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。 

    例如:employees表中,有两个部门的记录:department_id =10和20 

    select department_id,rank() over(partition by department_id order by salary) from employees   www.2cto.com  

    就是指在部门10中进行薪水的排名,在部门20中进行薪水排名。 

    如果是partition by org_id,则是在整个公司内进行排名。 

    ------------------------------- 

    sum(...) over ... 的使用 

    根据over(...)条件的不同 

    使用 sum(sal) over (order by ename)... 查询员工的薪水“连续”求和; 

    注意over (order by ename)如果没有order by 子句,求和就不是“连续”的, 

    把所有的值加到一起作为一个值。体会一下不同之处: 

    SQL> select deptno,ename,sal, 

    2 sum(sal) over (order by ename) 连续求和, 

    3 sum(sal) over () 总和, -- 此处sum(sal) over () 等同于sum(sal) 

    4 100*round(sal/sum(sal) over (),4) "份额(%)" 

    5 from emp 

    6 /   www.2cto.com  
     

        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 

    使用子分区查出各部门薪水连续的总和。注意按部门分区。注意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, 

    2 sum(sal) over (partition by deptno order by ename) 部门连续求和,--各部门的薪水"连续"求和   www.2cto.com  

    3 sum(sal) over (partition by deptno) 部门总和, -- 部门统计的总和,同一部门总和不变 

    4 100*round(sal/sum(sal) over (partition by deptno),4) "部门份额(%)", 

    5 sum(sal) over (order by deptno,ename) 连续求和, --所有部门的薪水"连续"求和 

    6 sum(sal) over () 总和, -- 此处sum(sal) over () 等同于sum(sal),所有员工的薪水总和 

    7 100*round(sal/sum(sal) over (),4) "总份额(%)" 

    8 from emp 

    9 / 

  • 相关阅读:
    2020-2021第一学期《网络空间安全导论》第十周自习总结
    2020-2021第一学期2024"DCDD"小组第九周讨论
    2020-2021第一学期《网络空间安全导论》第九周自习总结
    2020-2021第一学期2024"DCDD"小组第八周讨论
    2020-2021第一学期20202411《网络空间安全导论》第八周自习总结
    2020-2021第一学期2024"DCDD"小组第七周讨论
    2020-2021第一学期《计算机科学概论》第七周自习总结
    2020-2021第一学期2024"DCDD"小组第七周讨论
    2020-2021第一学期《计算机科学概论》第六周自习总结
    2020-2021第一学期20202411欧几里得算法
  • 原文地址:https://www.cnblogs.com/yuhuameng/p/10190926.html
Copyright © 2020-2023  润新知