Oracle的分析函数row_number(),rank(),dense_rank()的用法与区别

比如查询工资排名第7的员工信息,可以用分析函数来做。

--查询工资排名第7的员工信息
select *
  from (select emp.*, rank() over(order by sal desc) rank from emp)
 where rank = 7;
 
select *
  from (select emp.*, dense_rank() over(order by sal desc) dr from emp)
 where dr = 7;
 
select *
  from (select emp.*, row_number() over(order by sal desc) rn from emp)
 where rn = 7;

但他们的用法还是有区别的,这3个函数的唯一区别在于当碰到相同数据时的排名策略。

①ROW_NUMBER:

Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。

②DENSE_RANK:
Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。

③RANK:
Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。

依次贴图说明:

    

从图中可以看出,rownum遇到的数据无论是否相同,都按照顺序排序;dense_rank当遇到相同数据时,相同数据的排名是相同的,但会空出相应的排名;rank遇到相同的数据时,相同的数据排名相同,且不会空出相应的排名。

over()函数不能单独使用,必须和分析函数或者聚合函数一起使用

例如员工表中分部门进行排序

select ename,
deptno,
dense_rank() over(partition by deptno order by sal) dr
from emp;

over函数和sum函数一起使用可以实现连续求和

select ename,
deptno,
sal,
sum(sal) over(partition by deptno order by ename) part_sum
from emp;

over()函数是一个窗口说明函数,用来说明前面所接函数的限制条件,如果over函数中无条件,则求的是所有员工的工资总和

select ename,
deptno,
sal,
sum(sal) over()
from emp;

Oracle的分析函数的更多相关文章

  1. oracle的分析函数over 及开窗函数

    转:http://www.2cto.com/database/201310/249722.html oracle的分析函数over 及开窗函数   一:分析函数over   Oracle从8.1.6开 ...

  2. Oracle 10gR2分析函数

    Oracle 10gR2分析函数汇总 (Translated By caizhuoyi 2008‐9‐19) 说明:  1. 原文中底色为黄的部分翻译存在商榷之处,请大家踊跃提意见:  2. 原文中淡 ...

  3. 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数 (转)

    http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORAC ...

  4. 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数

    over(Partition by...) 一个超级牛皮的ORACLE特有函数. 天天都用ORACLE,用了快2年了.最近才接触到这个功能强大而灵活的函数.真实惭愧啊! oracle的分析函数over ...

  5. oracle的分析函数over(Partition by...) 及开窗函数

        over(Partition by...) 一个超级牛皮的ORACLE特有函数. oracle的分析函数over 及开窗函数一:分析函数overOracle从8.1.6开始提供分析函数,分析函 ...

  6. 分组函数group by和Oracle中分析函数partition by的用法以及区别

    1.分组函数group by和Oracle中分析函数partition by的用法以及区别 2.开窗函数.

  7. Oracle排序分析函数

    在Oracle自拓展SQL功能中,分析函数(Analytical Function)是非常强大的工具. 本篇我们介绍几个Oracle典型的排序分析函数,来帮助我们解决实际问题. 1.从rownum谈起 ...

  8. Oracle所有分析函数<转>

    Oracle分析函数——函数列表 SUM        :该函数计算组中表达式的累积和 MIN        :在一个组中的数据窗口中查找表达式的最小值 MAX        :在一个组中的数据窗口中 ...

  9. oracle之分析函数解析及其应用场景

    ORACLE 分析函数FIRST_VALUE,LAST_VALUE用法sum overavg over first_value overlast_value over...聚合函数结合over就是分析 ...

随机推荐

  1. JavaEE之动态页面技术(JSP/EL/JSTL)

    动态页面技术(JSP/EL/JSTL) JSP技术 jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%= ...

  2. js小数转分数-近似递归

    精度为小数两位,提高精度可把 toFixed(2)和100同时修改: function decimalsToFractional(decimals){ const formatDecimals = d ...

  3. 如何检测页面是否有重复的id属性值

    <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...

  4. JavaScript 递归法排列组合二维数组

    <html> <head> <title>二维数组排列组合</title> </head> <body> <div id= ...

  5. JS学习-基础运动

    多物体运动 多个物体用同一个函数时,函数里定义的定时器应该要每个物体对应一个定时器名称,不然会导致未完成运动就被关闭了,因为定时器名称一样,而开启定时器前会清除一下. obj.timer 多值同时运动 ...

  6. tomcat本地部署正常linux服务器报404

    tomcat主页访问正常,tomcat自带的examples项目也可以访问,可自己的项目就报404,这是什么问题那? 仔细看了下 服务器webapp下面的文件,访问时候 我是访问的服务器ip/Wech ...

  7. spring-springmvc code-based

    idea设置maven在下载依赖的同时把对应的源码下载过来.图0: 1 主要实现零配置来完成springMVC环境搭建,当然现在有了springBoot也是零配置,但是很多同仁都是从spring3.x ...

  8. javascript 匿名函数及闭包----转载

    网上很多解释,我无法理解,我想知道原理...这篇文章应该可以透彻一点Query片段:view plaincopy to clipboardprint? (function(){      //这里忽略 ...

  9. 【Leetcode】【Medium】Minimum Path Sum

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  10. Linux内核收包过程

    net/core/dev.c int __init net_dev_init(void) { queue->backlog.poll = process_backlog; open_softir ...