`

oracle sum()over函数的使用

    博客分类:
  • db
 
阅读更多
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 

 

分享到:
评论

相关推荐

    ORACLE分析函数

    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 () ...

    oracle函数介绍(6) 著名函数之分析函数.doc

    第六篇 著名函数之分析函数 1、AVG([DISTINCT|ALL] expr) OVER(analytic_clause) 计算平均值。 例如: ...SELECT col, sum(value) OVER(PARTITION BY col ORDER BY col) FROM tmp1 ORDER BY col;

    Oracle中的SUM用法讲解

    Oracle中的SUM条件查询 1、按照区域编码分组查询区域编码、IPTV_NBR不为空的数量、ACC_NBR不为空的数量、所有用户数量 SELECT AREA_CODE, SUM ( CASE WHEN IPTV_NBR IS NULL or IPTV_NBR = '' THEN 0 ELSE 1 END ),...

    oracle分析函数在BI分析中应用事例

    聚合函数可以是:sum,count,avg,max,min,first_value,last_value,rank,dense_rank ,row_number, ratio_to_report Over不能单独使用,用来制定数据窗口大小 Partition by表示分类数据集合,在此集合上的运算 Order by...

    oracle-10G函数大全.chm

    1,数值型函数(abs()、sign()、ceil()、floor()、power()、exp()、round()...);...6,分析函数(sum(...) over(...)、dense_rank、row_number()、lag()...); 7,其它函数(decode()、nvl()、nvl2()、least()...);

    Oracle中rank,over partition函数的使用方法

    这些排列函数提供了定义一个集合(使用 PARTITION 子句),然后根据某种排序方式对这个集合内的元素进行排列的能力,下面以scott用户的emp表为例来说明rank over partition如何使用。 1)查询员工薪水并连续求和 ...

    Oracle开发之分析函数总结

    这一篇是对前面所有关于分析函数的文章的总结: 一、统计方面: 代码如下:Sum() Over ([Partition by ] [Order by ])   Sum() Over ([Partition by ] [Order by ]   Rows Between Preceding And Following) ...

    Oracle开发之报表函数

    一、回顾一下前面《Oracle开发之窗口函数》中关于全统计一节,我们使用了Oracle提供的: 代码如下:sum(sum(tot_sales)) over (order by month rows between unbounded preceding and unbounded following) 来统计...

    Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

    在前面《Oracle开发之分析函数(Rank、Dense_rank、row_number)》一文中,我们已经知道了如何为一批记录进行全排列、分组排列。假如被排列的数据中含有空值呢? 代码如下:SQL> select region_id, customer_id,  ...

    oracle排名函数的使用方法分享

    在oracle中,有rank,dense_rank,row_number,以及分组排名partition。 说明: rank:排名会出现并列第n名,它...row_number() over(partition by bb.channel_name order by sum(aa.dk_serv_num) desc nulls last) p1_ra

    oracle数据库经典题目

    2.如果一个服务器进程非正常终止,Oracle系统将使用下列哪一个进程来释放它所占用的资源?( D ) A.DBWR B.LGWR C. SMON D.PMON 3. 如果要查询数据库中所有表的信息,应当使用下列哪种数据字典视图?( A ) A. ...

    Oracle事例

    sql> alter index xay_id allocate extent(size 200k datafile \'c:/oracle/index.dbf\'); <8>.alter index xay_id deallocate unused; 、查看索引 SQL>select index_name,index_type,table_name from user...

    SQL培训第一期

    1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query ...select后面出现的列,如果没有使用集合函数,必须出现在group by 中。 select sno,sname,sum(grade) from student group by sno,sname; //合法写法 select...

Global site tag (gtag.js) - Google Analytics