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函数学习的更多相关文章

  1. ORACLE 常用函数学习笔记

    1.字符串截取方法 --5SELECT INSTR('8.30~9.00', '~') FROM dual; --8.30SELECT SUBSTR ('8.30~9.00', 0, INSTR (' ...

  2. Oracle自定义函数和存储过程示例,自定义函数与存储过程区别

    参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...

  3. Oracle to_date()函数的用法

    Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...

  4. Oracle常用函数

    前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...

  5. Oracle to_char()函数的使用细则

    Oracle to_char()函数的使用细则,学习连接 http://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html

  6. Oracle教程之学习笔记

    Oracle教程之学习笔记... ----------------------------------- Oracle教程:---学习笔记: ============================= ...

  7. Oracle 正则表达式函数-REGEXP_REPLACE

    背景 当初写oracle的一个存储过程,以前不知道sql里也有正则表达式,关于正则表达式教程很多了,这里只是记录下Oracle也有这个功能,下次再有类似需求用这个处理的确方便很多. 想起存储过程,就想 ...

  8. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  9. oracle add_months函数

    oracle add_months函数 add_months 函数主要是对日期函数进行操作,举例子进行说明 add_months 有两个参数,第一个参数是日期,第二个参数是对日期进行加减的数字(以月为 ...

随机推荐

  1. java开发中的链式思维 —— 设计一个链式过滤器

    概述 最近在弄阿里云的sls日志服务,该服务提供了一个搜索接口,可根据各种运算.逻辑等表达式搜出想要的内容.具体语法可见https://help.aliyun.com/document_detail/ ...

  2. XJOI1652Matrix67的情书

    Matrix67的情书 恺撒大帝曾经使用过这样一种加密术:对于明文中的每个字母,恺撒大帝会用它后面的第t个字母代替.例如,当t=3时,字母A将变成C,字母B将变成D,--,字母Y将变成A,字母Z将变成 ...

  3. 【转】关于swf安全沙箱冲突:不能被本地访问

    错误提示:SWF 文件不能被本地访问 不能访问本地只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源 错误信息:SecurityError:Error #2148: SWF ...

  4. 手机自动化测试:Appium源码之API(2)

    手机自动化测试:Appium源码之API(2)   TouchAction AppiumDriver的辅助类,主要针对手势操作,比如滑动.长按.拖动等.TouchAction的原理是讲一系列的动作放在 ...

  5. 3.XML的格式化显示

    使用CSS/XSLT格式化XML,可以使XML具有更加多彩的显示效果. 3.1 使用CSS格式化显示XML 使用CSS格式化XML只需要在XML中加上: <?xml-stylesheet typ ...

  6. 万能数据库连接类-Oracle、DB2 、Access 、Sql Server

    package cc.apps.report;   import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

  7. 浅析Thread类run()和start()的区别

    1.先看看jdk文档 void run() If this thread was constructed using a separate Runnable run object, then that ...

  8. Nginx反向代理以及负载均衡配置

    项目地址:http://git.oschina.net/miki-long/nginx 前提:最近在研究nginx的用法,在windows上小试了一下,由于windows下不支持nginx缓存配置,所 ...

  9. 五子棋AI大战OC实现

    Gobang 五子棋AI大战,该项目主要用到MVC框架,用算法搭建AI实现进攻或防守 一.项目介绍 1.地址: github地址:Gobang 2.效果图: 二.思路介绍 大概说下思路,具体看代码实现 ...

  10. C++学习笔记1(标准的输入输出)

    前言: 个人一直以来比较懒,最近才准备记录一下自己学习C++的学习过程,希望自己能在写博客的时候能够坚持下去,欢迎大家在博客中支出存在的问题,好了不多说了,自己能坚持下去.我准备在我的博客中通过与C语 ...