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 正则表达式函数学习

    正则表达式中的元字符 -n:匹配换行符 -^:匹配字符串的开头位置 如果A是字符串的第一个字符,^A 匹配 A -$:匹配字符串的末尾位置 如果B是字符串的最后一个字符,$B 匹配 B -*:匹配前面 ...

  2. oracle 单行函数学习、习题和答案

    单行函数 –单行函数特征 – 单行函数对单行操作 – 每行返回一个结果 – 有可能返回值与原参数数据类型不一致 – 单行函数可以写在SELECT.WHERE.ORDER BY子句中 – 有些函数没有参 ...

  3. 【转】oracle PLSQL基础学习

    [转]oracle PLSQL基础学习 --oracle 练习: /**************************************************PL/SQL编程基础****** ...

  4. oracle+cast函数+长度,oracle cast() 函数问题

    oracle cast() 函数问题 关键字: oracle cast() 函数问题 SQL> create table t1(a varchar(10)); Table created. SQ ...

  5. Oracle 单行函数

    学习Oracle 单行函数: 包括字符函数,数值函数,日期函数,转换函数,通用函数. dual是一个"伪表",可以用来测试函数和表达式. 1, 字符函数 包括大小写控制函数,字符控 ...

  6. oracle values函数,Oracle文本函数简介

    Oracle文本函数使我们常用的函数,下面就为您介绍几种Oracle文本函数的用法,供您参考学习,希望可以让您对Oracle文本函数有更深的认识. (1)UPPER.LOWER和INITCAP 这三个 ...

  7. oracle 时间集合,oracle 日期函数集合(集中版本)第2/2页

    oracle 日期函数集合(集中版本)第2/2页 更新时间:2009年06月16日 23:45:55   作者: oracle 日期函数网上已经有了不少,特我们跟集中一下,免得大家麻烦. 一. 常用日 ...

  8. Oracle count函数原理,oracle count函数

    用来返回查询的行数. 当指定distinct时,不能接order_by_clause: 如果指定表达式,count返回表达式不为空的值: 当指定*号时,它返回所有行,含重复行和空值.count从不返回 ...

  9. 官方资料:Oracle 10g DBA 学习手册(精心整理,申请加精)

    官方资料:Oracle 10g DBA 学习手册(精心整理,申请加精) 目的 本章让您了解如何使用 Oracle Universal Installer (OUI) 安装您的 Oracle 数据库软件 ...

最新文章

  1. HDU - 3530 Subsequence(单调队列+思维)
  2. 没有可用软件包 jenkins。_Jenkins分布式构建与并行构建
  3. java对外sdk提供接口_Android SDK封装,对外提供接口
  4. 《scikit-learn》数据预处理与特征工程(三)特征选择
  5. vapor mysql_vapor MySQL 作为Cache
  6. windows下为eclipse配置pydev
  7. 重新学习java第一天
  8. xmind 软件画思维导图
  9. Android 设置闹铃步骤和基础代码
  10. 微信H5保存分享图片
  11. CYCLONEⅡ系列FPGA 总结
  12. open drain和push pull
  13. python基础教程_python基础教程百度网盘
  14. 金融信贷存量客户运营管理
  15. 如何利用Pycharm将工程文件上传到服务器
  16. 基于js利用经纬度进行两地的距离计算
  17. 小米8ios图标包下载_小米Max2开发版刷机包(最新官方固件rom包下载)
  18. 【微信公众平台】〖问题〗微信公众平台测试号报错,redirect_uri域名与后台配置不一致,错误码10003
  19. 英国普利茅斯大学:量子计算机与脑机接口的“相生相克”
  20. 有关项目管理的飞鸽传书2007官网

热门文章

  1. Android 服务器推送技术
  2. vb6 combo根据index显示选项内容_按指定次数重复显示,两种方法随意选
  3. java读取matlab文件_将大文本文件读入MATLAB
  4. efi分区咋移动到c盘里_怎么手动安装CLOVER到U盘EFI分区
  5. vins中imu融合_VINS-Mono代码分析与总结(最终版)
  6. jdk源码分析书籍 pdf_如何阅读源码?
  7. java return none,返回列表结果为none
  8. mysql的join语句使用_在MySQL中使用JOIN语句进行连接操作的详细教程
  9. 短信发送:webservice调用第三方接口发送短信
  10. liferay 采用URL方式传值