Oracle over函数学习
sql over的作用及用法
RANK ( ) OVER ( [query_partition_clause] order_by_clause )
DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause )
可实现按指定的字段进行分组,然后按照另一个字段在分组内进行排序,其中PARTITION BY 为分组字段,ORDER BY 指定排序字段。over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。其参数:over(partition by columnname1 order by columnname2)。含义:按columname1指定的字段进行分组,然后在分组的基础之上按照columnname2字段在分组内进行排序。
例如:EMP表中,有三个个部门的记录:DEPTNO分别为10、20和30。以下SQL就是指在部门10、20和30三个部门中按照薪水进行排序。
select DEPTNO,SAL,rank() OVER(partition by DEPTNO order by SAL DESC) from EMP

同时需要注意rank()、dense_rank()和Row_number()的区别:
- row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页
- dense_rank() 是连续排序,两个第二名仍然跟着第三名
- rank() 是跳跃排序,两个第二名下来就是第四名。
例如如下dense_rank和上面rank()语句结果的区别:
select DEPTNO,SAL,DENSE_RANK() OVER(partition by DEPTNO order by SAL) from EMP

对于row_number()结果如下:
select DEPTNO,SAL,row_Number() OVER(partition by DEPTNO order by SAL DESC) from EMP

同时over语句也可以和SUM()语句一起使用,不同的OVER()语句代表不同的求和方式。还以EMP表为例:
- 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)。
select DEPTNO,SAL,SUM(SAL) OVER() 总和,SUM(SAL) OVER(ORDER by SAL) 连续求和 from EMP

select DEPTNO,SAL,SUM(SAL) OVER(partition by deptno) 部门总和,SUM(SAL) OVER(partition by deptno ORDER by SAL) 部门连续求和 from EMP
Oracle over函数学习的更多相关文章
- ORACLE 常用函数学习笔记
1.字符串截取方法 --5SELECT INSTR('8.30~9.00', '~') FROM dual; --8.30SELECT SUBSTR ('8.30~9.00', 0, INSTR (' ...
- Oracle自定义函数和存储过程示例,自定义函数与存储过程区别
参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...
- Oracle to_date()函数的用法
Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...
- Oracle常用函数
前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...
- Oracle to_char()函数的使用细则
Oracle to_char()函数的使用细则,学习连接 http://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html
- Oracle教程之学习笔记
Oracle教程之学习笔记... ----------------------------------- Oracle教程:---学习笔记: ============================= ...
- Oracle 正则表达式函数-REGEXP_REPLACE
背景 当初写oracle的一个存储过程,以前不知道sql里也有正则表达式,关于正则表达式教程很多了,这里只是记录下Oracle也有这个功能,下次再有类似需求用这个处理的确方便很多. 想起存储过程,就想 ...
- Python3中的字符串函数学习总结
这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...
- oracle add_months函数
oracle add_months函数 add_months 函数主要是对日期函数进行操作,举例子进行说明 add_months 有两个参数,第一个参数是日期,第二个参数是对日期进行加减的数字(以月为 ...
随机推荐
- C#中ListView易错的方法
现在有一个ListView(lv1),有2列. ListViewItem lvi = new ListViewItem(); lvi.Text = "语文"; lvi.SubIte ...
- 关于Union和Union All的区别以及用法
有些时候我们在查询的时候会碰到这么一个问题,就是一条SQL不能查出来你想要的结果;首先,我们必须明确一条查询SQL执行之后数据库会给我们返回什么,他会返回符合条件的一个结果集,而当你一条查询SQL不能 ...
- 老李教你性能测试监控工具nmon
老李教你性能测试监控工具nmon loadrunner的某些性能监控器不够强大,这就需要我们利用更好的工具进行监控,在项目中我们会用nmon工具作为辅助性能监控的工具,帮助我们进行性能分析,pop ...
- 老李分享:android手机测试之适配(1)
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- 在app中屏蔽第三方键盘
iOS8开放了安装第三方键盘的权限,但是在项目开发中,有些情况是需要禁用第三方键盘的.比如说,数字键盘上需要自定义按钮,但是在第三方键盘弹出时,按钮就覆盖在这上面了,在这中情况下,最好的办法是禁用第三 ...
- iOS 检测文本中的 URL、电话号码等信息
iOS 检测文本中的 URL.电话号码等信息 要检测文本中的 URL.电话号码等,除了用正则表达式,还可以用 NSDataDetector. 用 NSTextCheckingResult.Checki ...
- quartus ii有符号数的问题(待完善)
1.有符号数是以补码的形式存储的,在modelsim仿真时,补码自动转换为有符号的十进制数. 2.关于截位的问题: 当只取寄存器中的其中m位时,这时候取得的数是按照无符号位来处理的? 3.reg型数据 ...
- 静态链表实现(A-B)+(B-A)【代码】
-----------------------------------------------第一次发代码,写在前面------------------------------------------ ...
- ELK日志分析系统的应用
收集和分析日志是应用开发中至关重要的一环,互联网大规模.分布式的特性决定了日志的源头越来越分散, 产生的速度越来越快,传统的手段和工具显得日益力不从心.在规模化场景下,grep.awk 无法快速发挥作 ...
- start with connect by prior 递归查询用法,很实用
当开发过程需要查询上下级机构类似的树形机构,还有就是查询当前等级下的所有所属节点 这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点. 先看原始 ...