oracle row number (),Oracle 分析函数 ROW_NUMBER() 使用
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() 使用相关推荐
- oracle创建 number,oracle创建表的方法和一些常用命令
1.主键和外键 主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(注意是组,可以是一个,也可以是多个)能唯一标识一条记录,那么该属性组就是主键 外键:关系型数据库表中的一列或者某几列 ...
- oracle return rowid,Oracle rowid 详解
本文讨论的是关于oracle从8i开始引进object的概念后的rowid,即扩展(extended)的rowid: Oracle6,ROWID中仅用6 bit代表文件号Oracle8,ROWID组成 ...
- row number函数 oracle,oracle函数 ROW_NUMBER()
[语法]ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) [功能]表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后 ...
- Oracle 分析函数--Row_Number()
row_number() over ([partition by col1] order by col2) ) as 别名 表示根据col1分组,在分组内部根据 col2排序 而这个"别名& ...
- Oracle SQL高级编程——分析函数(窗口函数)全面讲解
Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...
- oracle菜鸟学习之 分析函数-排序
oracle菜鸟学习之 分析函数-排序 排序函数 1.row_number:返回连续的排序,无论值是否相等 2.rank:具有相等值得行排序相同,序数值随后跳跃 3.dense_rank:具有相等值得 ...
- oracle 排序的分析函数,oracle菜鸟学习之 分析函数-排序
oracle菜鸟学习之 分析函数-排序 排序函数 1.row_number:返回连续的排序,无论值是否相等 2.rank:具有相等值得行排序相同,序数值随后跳跃 3.dense_rank:具有相等值得 ...
- Oracle中rank() over, dense_rank(), row_number() 的区别
Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成绩 ...
- Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长
http://otvety.google.ru/otvety/thread?tid=46ed8b35f29d2640 在Oracle中Number类型可以用来存储0,正负定点或者浮点数,可表示的数据范 ...
- Oracle Row cache lock图解
Oracle Row cache lock(dictionary cache)图解 转载于:https://blog.51cto.com/maclean/1278273
最新文章
- java jar包搜索地址 and ADB 连接模拟器
- iOS进阶之架构设计MVVM模式仿新闻项目(6)
- 结对编程之四则运算(马仪生、李瑞恒)
- 云炬Android开发笔记 18解决沉浸栏的Bug和被手机状态栏遮挡的问题
- C语言博客作业06--结构体文件
- linux文件状态,Linux命令之stat - 显示文件或文件系统状态
- JS实践与写博客-序
- [转载] Python: ord()函数
- 凭证反过账 金蝶k3_金蝶软件k3凭证反过账
- 最短路问题——spfa算法
- 新版应急预案现场处置应急演练方案各行业应急处置方案(共289份,265M)
- 《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第3章 TWen-ASR-ONE 多线程和消息队列
- Python练习题16:人名独特性统计
- [JZOJ]2109 清兵线 题解
- C/C++读取txt
- 安卓无法下载excel文件
- 广东某银行基于阿凡搭在信创环境下打造全行科技一体化服务平台
- 【科研导向】Neural Collaborative Filtering 神经协同过滤 <论文理解代码分析>
- Mac安装brew及问题解决
- 如何快速搜索电脑文件
热门文章
- 云计算机房防雷规范,弱电机房设计内容规范大全
- 求相似三角形的几种方法,相似三角形 计算公式
- 终点与起点——诺基亚 N9 初步上手
- MAC OS(U盘启动教程)
- 基于七牛播放器的直播
- 软件测试流程改进的几点看法
- python科学计算第三版-python科学计算pdf下载
- python list转json对象_将列表转换为json对象
- CeBIT亮点:IBM“绿色地平线” 战斗在雾霾治理的科技前线
- 欧姆龙rxd指令讲解_欧姆龙cp1h常用指令学习(四)串口无协议读写指令TXD,RXD...