row_number() over(partition by ... order by ...)

rank() over(partition by ... order by ...)

dense_rank() over(partition by ... order by ...)

/*--建表和插入测试数据
create table test (A1 number, A2 number );
insert into test(a1,a2) values(1, 3);
insert into test(a1,a2) values(2, 4);
insert into test(a1,a2) values(3, 2);
insert into test(a1,a2) values(3, 5);
insert into test(a1,a2) values(4, 2);

select a1,a2,
        rank () over (order by a1) rank,
        dense_rank () over (order by a1) dense_rank,
        row_number () over (order by a1) row_number
from test;
 */
         A1         A2       RANK DENSE_RANK ROW_NUMBER
---------- ---------- ---------- ---------- ----------
         1          3          1          1          1
         2          4          2          2          2
         3          2          3          3          3
         3          5          3          3          4
         4          2          5          4          5

rank()是跳跃排序,有两个第3名时接下来就是第四名

dense_rank在有出现相同的rank后,rank的值是紧接上一次的rank值。
top N
的实现应该采用row_number() over 而不是rank () over,

/*--有两列,按第一列求第二列的累计和,第一列不要求唯一

create table TEST
(
  A1 NUMBER,
  A2 NUMBER
);

/

insert into TEST (A1, A2)
values (3, 3);
insert into TEST (A1, A2)
values (1, 3);
insert into TEST (A1, A2)
values (2, 4);
insert into TEST (A1, A2)
values (3, 2);
insert into TEST (A1, A2)
values (4, 5);
insert into TEST (A1, A2)
values (5, 2);
insert into TEST (A1, A2)
values (3, 1);
commit;

select a1, a2, sum(a2) over(order by a1 rows unbounded preceding) from test; 或者

select a1, a2, sum(a2) over(order by t) from (select a1, a2 , row_number() over(order by (a1)) t from test);

*/

因为row_number 是给记录加一个序号标记,而rank
是相当于进行排序后的排名,也就是如果排序列是相同的,

那么他们的返回值也是相同的,而row_number则不可能返回相同值。

count() over(partition by ... order by ...)

max() over(partition by ... order by ...)

min() over(partition by ... order by ...)

sum() over(partition by ... order by ...)

avg() over(partition by ... order by ...)

first_value() over(partition by ... order by ...)

last_value() over(partition by ... order by ...)

lag() over(partition by ... order by ...)

lead() over(partition by ... order by ...)

--查找每个部门工资最高前三名员工信息
/*select * from (select deptno,ename,sal,dense_rank() over(partition by deptno order by sal desc) a from scott.emp)
where a<=3 order by deptno asc,sal desc ;*/

--求每个部门的平均工资以及每个人与所在部门的工资差额
/*select deptno,ename,sal ,
     round(avg(sal) over(partition by deptno)) as dept_avg_sal,
     round(sal-avg(sal) over(partition by deptno)) as dept_sal_diff
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. Oracle的分析函数

    Oracle的分析函数row_number(),rank(),dense_rank()的用法与区别 比如查询工资排名第7的员工信息,可以用分析函数来做. --查询工资排名第7的员工信息select * ...

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

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

  8. Oracle排序分析函数

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

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

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

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

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

随机推荐

  1. [Phalcon] DI默认的服务

    代码,说明一切 namespace Phalcon\Di\FactoryDefault; use Phalcon\Di\Service; use Phalcon\Di\FactoryDefault; ...

  2. Jquery EeasyUI等框架中图标的处理方法

    在使用Query EasyUI.Ext等框架开发项目的时候,经常会用到很多小的图标,常见几个图片应用方式总结如下: 一.在jQuery Easyui中添加小图标 1.添加图标的两小步: 先到theme ...

  3. Hiho coder 1236 2015 北京网络赛 Score

    五维偏序..一开始被吓到了,后来知道了一种BITSET分块的方法,感觉非常不错. 呆马: #include <iostream> #include <cstdio> #incl ...

  4. cocos2d-x quick 学习 二 Hello world

    总算找到问题了. 这几天一直在招问题没有找到原因. 为什么按照文档就不能建立新的项目.  不能建立自己的 hello world 我之前下载的源码文件 quick-cocos2d-x-2.2.5   ...

  5. MVC系列1-MVC基础 (ASP.NET)

    终于决定写一个系列的文章了,最开始其实是准备写一下WPF的,因为我这两年一直在做WPF,对WPF的喜爱自然是无以言表.但是由于我所在的地区对WPF的普及不是很广泛,所以,被迫又开始做起来web,但是我 ...

  6. LabVIEW类方法浏览器-Class Method Browser

    随着LabVIEW的类编程应用增多,当打开较多的VI进行编辑时候,添加该类对应的VI方法到程序后背板上操作显得繁琐(需要在Project浏览器或类浏览器或库浏览器中找到该类的方法VI,然后再拖到程序背 ...

  7. zigbee学习之路(十一):看门狗

    一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...

  8. 移动APP的开发需求分析

    一.项目概况 项目名称为上海地铁游.本项目是以上海地铁为线索,开发的一个移动APP.主要目的是帮助用户实现根据当前位置选择最方便的地铁旅游点和旅游推荐,方便出行,让更多人可以借助地铁的便利去认识和体验 ...

  9. [Machine-Learning] K临近算法-简单例子

    k-临近算法 算法步骤 k 临近算法的伪代码,对位置类别属性的数据集中的每个点依次执行以下操作: 计算已知类别数据集中的每个点与当前点之间的距离: 按照距离递增次序排序: 选取与当前点距离最小的k个点 ...

  10. XCode与Git的完美融合,不再依赖其它Git客户端

    Git源代码管理工具的出现,使得我们开发人员对于源码的管理更加方便快捷.至于Git的优点以及与其他源代码管理工具有何区别,不是本文的重点,如果想深入了解可以搜索一下这方面的文章.下面直接进入主题,如何 ...