over() 函数 是对 分析函数的一种条件解释,直接点就是 给分析函数加条件吧。

  在网上看见比较常用的就是 与 sum()、rank() 函数使用。接下来就用分析下两种函数结合over的用法。

  以下测试使用的orace默认的 scott用户下的emp表数据。

  1.sum()结合over()

  Sql代码

  select a.empno as 员工编号

  ,a.ename as 员工姓名

  ,a.deptno as 部门编号

  ,a.sal as 薪酬

  ,sum(sal) over (partition by deptno) 按部门求薪酬总和

  from scott.emp a;

  此段sql 执行的结果为:

  部门编号 员工姓名 员工编码 薪酬 按部门求薪酬总和

  7934 MILLER 10 1300 8750

  7782 CLARK 10 2450 8750

  7839 KING 10 5000 8750

  7369 SMITH 20 800 10875

  7876 ADAMS 20 1100 10875

  7566 JONES 20 2975 10875

  7788 SCOTT 20 3000 10875

  7902 FORD 20 3000 10875

  7900 JAMES 30 950 9400

  7654 MARTIN 30 1250 9400

  7521 WARD 30 1250 9400

  7844 TURNER 30 1500 9400

  7499 ALLEN 30 1600 9400

  7698 BLAKE 30 2850 9400

  可以从结果上看到sum()函数对部门区分进行了求和统计。其中“partition by”官方点的说法叫做"分区",其实就是统计的范围条件。

  下面在给把上面的sql语句改造下 给 over() 函数加上 “order by sal” 会看到一个更过瘾的效果:

  Sql代码

  select a.empno as 员工编号

  ,a.ename as 员工姓名

  ,a.deptno as 部门编号

  ,a.sal as 薪酬

  ,sum(sal) over (partition by deptno) 按部门求薪酬总和

  ,sum(sal) over (partition by deptno order by sal) 按部门累计薪酬

  from scott.emp a;

  结果为:

  部门编号 员工姓名 员工编码 薪酬 按部门求薪酬总和  按部门累计薪酬

  7934 MILLER 10 1300 8750 1300

  7782 CLARK 10 2450 8750 3750

  7839 KING 10 5000 8750 8750

  7369 SMITH 20 800 10875 800

  7876 ADAMS 20 1100 10875 1900

  7566 JONES 20 2975 10875 4875

  7788 SCOTT 20 3000 10875 10875

  7902 FORD 20 3000 10875 10875

  7900 JAMES 30 950 9400 950

  7654 MARTIN 30 1250 9400 3450

  7521 WARD 30 1250 9400 3450

  7844 TURNER 30 1500 9400 4950

  7499 ALLEN 30 1600 9400 6550

  7698 BLAKE 30 2850 9400 9400

  从结果中可以看的 加了 “order by”后对 统计进行一个累加,这里个人理解为对统计范围规定了个统计顺利,一步一步的统计。

  注:此sql语句结尾处不要加“order by”,应为使用的分析函数的(partition by deptno order by sal)

  里已经有排序的语句了,如果再在句尾添加排序子句,一致倒罢了,不一致,结果就令人费解了。

  2.rank()结合over()

  rank函数是分级函数,这个函数必须与 over 函数使用,否则会报一个"缺少窗口函数的错"。我测试sql如下:

  Sql代码

  select a.empno as 员工编号,

  a.sal as 薪资,

  a.job as 岗位,

  rank() OVER(partition by a.job ORDER BY a.sal desc) as 岗位薪资等级

  from scott.emp a;

  查询结果为:

  员工编号 薪资 岗位 等级

  7902 3000 ANALYST 1

  7788 3000 ANALYST 1

  7934 1300 CLERK 1

  7876 1100 CLERK 2

  7900 950 CLERK 3

  7369 800 CLERK 4

  7566 2975 MANAGER 1

  7698 2850 MANAGER 2

  7782 2450 MANAGER 3

  7839 5000 PRESIDENT 1

  7499 1600 SALESMAN 1

  7844 1500 SALESMAN 2

  7654 1250 SALESMAN 3

  7521 1250 SALESMAN 3

转自:http://www.poluoluo.com/jzxy/201004/81921.html

Oracle中over用法相关推荐

  1. LTRIM、RTRIM和TRIM在ORACLE中的用法:

    LTRIM.RTRIM和TRIM在ORACLE中的用法: 1.LTRIM(C1,C2) 其中C1和C2都可以字符串,例如C1是'Miss Liu',C2'MisL'等等.这是第一个和SQL SERVE ...

  2. ORACLE 中ROWNUM用法总结!

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  3. oracle中何时会用到join,Oracle中join用法的演示

    以下的文章主要介绍的是Oracle中join用法,如果你是其方面的新手,对Oracle中oin的实际用法很感兴趣,但是却找不到一些资料去对其进行更深入的了解的话,你不妨浏览以下的文章对其进行了解. O ...

  4. oracle中using用法,Oracle中Using用法

    Oracle中Using用法 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数 ...

  5. oracle中%type用法,oracle中declare用法

    第8 章 函数与存储过程 Oracle数据库中不仅可以使用单条语句对数据库进行 数据库中不仅可以使用单条语句对数据库进行 查操作,而且可以多条语句组成一个语句块, 增.删.改.查操作,而且可以多条语句 ...

  6. Oracle中union用法

    Oracle中union用法 一.union用于查询结果可能存在多张表中的数据,并剔除重复数据据. 二.union all 用于查询结果可能存在多张表中的数据,并将所有数据返回. 三.写法: sele ...

  7. Oracle中rownum用法警示

    今天调试代码,发现分页查询时使用Oracle中rownum的between......and用法的bug,特此总结: 参考资料:http://blog.csdn.net/lg312200538/art ...

  8. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  9. oracle中call用法,Oracle数据库中 call 和 exec的区别

    Oracle数据库中 call 和 exec的区别 今天发现了一个小东西,觉得很有意思,查找了一些资料,跟大家分享一下: 在sqlplus中: 在第三方提供的工具(如:plsqldev) 总结: ex ...

  10. oracle 中over用法

    有关oracle 中 over的用法 http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html

最新文章

  1. 20个经典函数细说 Pandas 中的数据读取与存储,强烈建议收藏
  2. golang 数组与切片
  3. C\C++网络编程总结
  4. 检测电脑硬件的软件_为电脑DIY爱好者推荐一款非常实用的硬件测试软件
  5. Lodop输出页面input文本框的最新值
  6. sqlMapConfig.xml配置文件详解
  7. 企业中个别机械类制图软件无法打印的问题汇总
  8. 【转】Maven 手动添加 JAR 包到本地仓库
  9. 微服务深入浅出(4)-- 负载均衡Ribbon
  10. AI算法工程师 | 01人工智能基础-快速入门
  11. Windows系统字体和系统应用字体
  12. MySQL与CVM自建数据库优势_UCloud云数据库MySQL产品优势及与自建数据库对比
  13. 2023五一旅游必备物品清单!快记到手机待办APP里
  14. [Excel VBA]如何批量產出QRcode?
  15. hackinglab.cn 注入关之一
  16. 两点三次埃尔米特插值
  17. 又涨了?2023全国程序员薪资最新统计(文末附招聘岗位)
  18. 低轨卫星传播特性仿真与分析
  19. 在微型计算机中硬件和软件的关系是_,计算机的硬件系统和软件系统的关系是什么?...
  20. 教师资格证报名显示内部服务器出错,教师资格证考试报名6个“坑”,小心报名失败!...

热门文章

  1. ES6的扩展运算符 [...arr]
  2. 辐射4 中文武器命名方法, 不用winhex, 直接游戏内操作
  3. 计算机动画与游戏考研,上海交通大学电子信息与电气工程学院专业学位课程内容介绍《计算机动画建模与渲染》...
  4. MC9S12XEP100的IIC模块(IICV3)
  5. 因为相信所以看见,既然看见注定坚信《16》
  6. Makfile笔记——patsubst函数、foreacch函数、wildcard函数
  7. 计算机上没有office2010,电脑装上office2010后,新建里面没有,该怎么处理
  8. 单个字符串json返回问号解决
  9. 解析世界杯超大规模直播场景下的码率控制
  10. 在Word中录入文字时,敲一个字后边就吞掉后边一个字