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 /

oracle累积求和分析函数sum over的使用的更多相关文章

  1. 利用Oracle内置分析函数进行高效统计汇总

      分析函数是Oracle从8.1.6开始引入的一个新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现 ...

  2. SQL Cumulative Sum累积求和

    期望结果:  ID  VAL  CumSum  1  10  10  2  20  30  3  30  60 方法一: 使用分析函数 select id,val,sum(val) over ( or ...

  3. Oracle分析函数 — sum, rollup, cube, grouping用法

    本文通过例子展示sum, rollup, cube, grouping的用法. //首先建score表 create table score( class  nvarchar2(20), course ...

  4. Oracle 中的分析函数

    Oracle常用分析函数介绍(排名函数+窗口函数) 2014年11月30日 ⁄ 数据库 ⁄ 共 3903字 ⁄ 暂无评论 ⁄ 阅读 7,772 次 评级函数 常见评级函数如下: RANK():返回数据 ...

  5. Oracle聚合求和和聚合求积(顺便解决BOM展开的问题)

    本文参考网址:http://www.itpub.net/thread-1020772-1-1.html 我们在日常的工作中,经常遇到了针对某一列的值,进行求和,求平均值,在一些特殊的业务场景下,我们需 ...

  6. oracle进阶之分析函数

    本博客是自己在学习和工作途中的积累与总结,纯属经验之谈,仅供自己参考,也欢迎大家转载,转载时请注明出处. http://www.cnblogs.com/king-xg/p/6797119.html 分 ...

  7. 【Oracle】oracle之listagg分析函数

    oracle分析函数——listagg篇 (1)使用listagg将多行数据合并到一行 例表: select deptno, ename from emp order by deptno, ename ...

  8. oracle累计求和

    //将当前行某列的值与前面所有行的此列值相加,即累计求和: //方法一: with t as(      select 1 val from dual union all      select 3 ...

  9. 编写一个求和函数sum,使输入sum(2)(3)或输入sum(2,3),输出结果都为5

    昨天的笔试题,做的一塌糊涂,题目考的都很基础而且很细,手写代码对我来说是硬伤啊.其中有一道是这个,然而看到题目的时候,根本没有想到arguments:然后现在就恶补一下. arguments:用在函数 ...

随机推荐

  1. Spring笔记 #02# 利用切面和注解校验方法参数

    例子还是之前的例子.仍然是对mage进行法术攻击时的咒语进行校验,不过略微提高了扩展性. 应用示例 1.在.properties文件中定义参数格式(正则): sp1=^\\D*hello\\D*$ s ...

  2. 1、Kafka介绍

    1.Kafka介绍 1)在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 2)Kafka是一个分布式消息队列. 3)Kafka对消息保存时根据Topic进行归类, ...

  3. Linux 查看内存状态

    # 查看系统内存 命令:free 注:默认k单位显示 注:-m 以MB 注:-g以GB 单位显示 total used free shared buffers cached Mem: -/+ buff ...

  4. mysqlbinlog相关

    1.输出binlog到文件mysqlbinlog --base64-output=decode-rows -v /home/mysql/binlog/binlog.000011>/tmp/aa. ...

  5. JNI与底层调用

    交叉编译 在一个平台下,编译出另一个平台能够执行的二进制的代码 平台:windows,mac os,linux 处理器:x86,arm,mips 交叉编译的原理 源代码->编译->链接-& ...

  6. 剑指offer(50)数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  7. NOIP 2017 列队 - Splay - 树状数组

    题目传送门 传送点I 传送点II 题目大意 (家喻户晓的题目应该不需要大意) (我之前咋把NOIP 2017打成了NOIP 2018,好绝望) Solution 1 Splay 每行一颗Splay,没 ...

  8. Ansible 的初步使用

    在安装好ansible以后,首先使用ansible -h命令和ansible --version 命令查看帮助手册和版本信息. ansible 配置文件 ansible 的配置文件有多个位置,查找顺序 ...

  9. wrk 安装使用

    ==================== 安装 ====================https://github.com/wg/wrk/wiki sudo yum -y groupinstall ...

  10. tar命令-压缩,解压缩文件

    tar: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 上面五个参数是独立的,压缩解压都要用到其中一个,可以和下面的命令连用但只能用其 ...