1、row_number() over()排序功能:

(1) row_number() over()分组排序功能:

在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by  order by 的执行。

partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。

例如:emp,根据部门分组排序。

SQL> select empno,deptno,sal ,row_number() over (partition by deptno order by sal desc) rank from emp;

EMPNO     DEPTNO     SAL       RANK

---------- ---------- ---------- ----------

7839   10    5000  1

7782   10    2450  2

7934   10    1300  3

7788   20    3000  1

7902   20    3000  2

7566   20    2975  3

7876   20    1100  4

7369   20     800  5

7698   30    2850  1

7499   30    1600  2

7844   30    1500  3

7654   30    1250  4

7521   30    1250  5

7900   30     950  6

14 rows selected.

(2)对查询结果进行排序:(无分组)

SQL> select empno,deptno,sal ,row_number() over (order by sal desc) rank from emp;

EMPNO     DEPTNO     SAL       RANK

---------- ---------- ---------- ----------

7839   10    5000  1

7902   20    3000  2

7788   20    3000  3

7566   20    2975  4

7698   30    2850  5

7782   10    2450  6

7499   30    1600  7

7844   30    1500  8

7934   10    1300  9

7521   30    1250 10

7654   30    1250 11

7876   20    1100 12

7900   30     950 13

7369   20     800 14

14 rows selected.

row_number() over()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).

2、rank() over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).

SQL> select empno,deptno,sal ,rank() over (partition by deptno order by sal desc) rank from emp;

EMPNO     DEPTNO     SAL       RANK

---------- ---------- ---------- ----------

7839   10    5000  1

7782   10    2450  2

7934   10    1300  3

7788   20    3000  1

7902   20    3000  1

7566   20    2975  3          --跳跃了

7876   20    1100  4

7369   20     800  5

7698   30    2850  1

7499   30    1600  2

7844   30    1500  3

7654   30    1250  4

7521   30    1250  4

7900   30     950  6

14 rows selected.

SQL> select empno,deptno,sal ,rank() over (order by sal desc) rank from emp;

EMPNO     DEPTNO     SAL       RANK

---------- ---------- ---------- ----------

7839   10    5000  1

7902   20    3000  2

7788   20    3000  2

7566   20    2975  4        --跳跃了

7698   30    2850  5

7782   10    2450  6

7499   30    1600  7

7844   30    1500  8

7934   10    1300  9

7521   30    1250 10

7654   30    1250 10

7876   20    1100 12

7900   30     950 13

7369   20     800 14

14 rows selected.

3、dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .

SQL> select empno,deptno,sal ,dense_rank() over (order by sal desc) rank from emp;

EMPNO     DEPTNO     SAL       RANK

---------- ---------- ---------- ----------

7839   10    5000  1

7902   20    3000  2

7788   20    3000  2

7566   20    2975  3

7698   30    2850  4

7782   10    2450  5

7499   30    1600  6

7844   30    1500  7

7934   10    1300  8

7521   30    1250  9

7654   30    1250  9

7876   20    1100 10

7900   30     950 11

7369   20     800 12

14 rows selected.

SQL> select empno,deptno,sal ,dense_rank() over (partition by deptno order by sal desc) rank from emp;

EMPNO     DEPTNO     SAL       RANK

---------- ---------- ---------- ----------

7839   10    5000  1

7782   10    2450  2

7934   10    1300  3

7788   20    3000  1

7902   20    3000  1

7566   20    2975  2    --不跳跃

7876   20    1100  3

7369   20     800  4

7698   30    2850  1

7499   30    1600  2

7844   30    1500  3

7654   30    1250  4

7521   30    1250  4

7900   30     950  5

14 rows selected.

使用ROW_NUMBER删除重复数据

---假设表TAB中有a,b,c三列,可以使用下列语句删除a,b,c都相同的重复行。

DELETE FROM (select year,QUARTER,RESULTS,row_number() over(partition by YEAR,QUARTER,RESULTS order by YEAR,QUARTER,RESULTS) AS ROW_NO FROM SALE )

WHERE ROW_NO>1

oracle row number (),Oracle 分析函数 ROW_NUMBER() 使用相关推荐

  1. oracle创建 number,oracle创建表的方法和一些常用命令

    1.主键和外键 主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(注意是组,可以是一个,也可以是多个)能唯一标识一条记录,那么该属性组就是主键 外键:关系型数据库表中的一列或者某几列 ...

  2. oracle return rowid,Oracle rowid 详解

    本文讨论的是关于oracle从8i开始引进object的概念后的rowid,即扩展(extended)的rowid: Oracle6,ROWID中仅用6 bit代表文件号Oracle8,ROWID组成 ...

  3. row number函数 oracle,oracle函数 ROW_NUMBER()

    [语法]ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) [功能]表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后 ...

  4. Oracle 分析函数--Row_Number()

    row_number() over ([partition by col1] order by col2) ) as 别名 表示根据col1分组,在分组内部根据 col2排序 而这个"别名& ...

  5. Oracle SQL高级编程——分析函数(窗口函数)全面讲解

    Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...

  6. oracle菜鸟学习之 分析函数-排序

    oracle菜鸟学习之 分析函数-排序 排序函数 1.row_number:返回连续的排序,无论值是否相等 2.rank:具有相等值得行排序相同,序数值随后跳跃 3.dense_rank:具有相等值得 ...

  7. oracle 排序的分析函数,oracle菜鸟学习之 分析函数-排序

    oracle菜鸟学习之 分析函数-排序 排序函数 1.row_number:返回连续的排序,无论值是否相等 2.rank:具有相等值得行排序相同,序数值随后跳跃 3.dense_rank:具有相等值得 ...

  8. Oracle中rank() over, dense_rank(), row_number() 的区别

    Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成绩 ...

  9. Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长

    http://otvety.google.ru/otvety/thread?tid=46ed8b35f29d2640 在Oracle中Number类型可以用来存储0,正负定点或者浮点数,可表示的数据范 ...

  10. Oracle Row cache lock图解

    Oracle Row cache lock(dictionary cache)图解   转载于:https://blog.51cto.com/maclean/1278273

最新文章

  1. java jar包搜索地址 and ADB 连接模拟器
  2. iOS进阶之架构设计MVVM模式仿新闻项目(6)
  3. 结对编程之四则运算(马仪生、李瑞恒)
  4. 云炬Android开发笔记 18解决沉浸栏的Bug和被手机状态栏遮挡的问题
  5. C语言博客作业06--结构体文件
  6. linux文件状态,Linux命令之stat - 显示文件或文件系统状态
  7. JS实践与写博客-序
  8. [转载] Python: ord()函数
  9. 凭证反过账 金蝶k3_金蝶软件k3凭证反过账
  10. 最短路问题——spfa算法
  11. 新版应急预案现场处置应急演练方案各行业应急处置方案(共289份,265M)
  12. 《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第3章 TWen-ASR-ONE 多线程和消息队列
  13. Python练习题16:人名独特性统计
  14. [JZOJ]2109 清兵线 题解
  15. C/C++读取txt
  16. 安卓无法下载excel文件
  17. 广东某银行基于阿凡搭在信创环境下打造全行科技一体化服务平台
  18. 【科研导向】Neural Collaborative Filtering 神经协同过滤 <论文理解代码分析>
  19. Mac安装brew及问题解决
  20. 如何快速搜索电脑文件

热门文章

  1. 云计算机房防雷规范,弱电机房设计内容规范大全
  2. 求相似三角形的几种方法,相似三角形 计算公式
  3. 终点与起点——诺基亚 N9 初步上手
  4. MAC OS(U盘启动教程)
  5. 基于七牛播放器的直播
  6. 软件测试流程改进的几点看法
  7. python科学计算第三版-python科学计算pdf下载
  8. python list转json对象_将列表转换为json对象
  9. CeBIT亮点:IBM“绿色地平线” 战斗在雾霾治理的科技前线
  10. 欧姆龙rxd指令讲解_欧姆龙cp1h常用指令学习(四)串口无协议读写指令TXD,RXD...