Oracle提供的序号函数
来源:互联网 发布:无声鼠标 知乎 编辑:程序博客网 时间:2024/06/06 00:33
Oracle提供的序号函数:
以emp表为例:
1: rownum 最简单的序号 但是在order by之前就确定值.
select rownum,t.* from emp t order by ename
行数ROWNUMEMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO1117876ADAMSCLERK77881987-5-231100 20227499ALLENSALESMAN76981981-2-20160030030367698BLAKEMANAGER78391981-5-12850 30477782CLARKMANAGER78391981-6-92450 105137902FORDANALYST75661981-12-33000 206127900JAMESCLERK76981981-12-3950 30747566JONESMANAGER78391981-4-22975 20897839KINGPRESIDENT 1981-11-175000 10957654MARTINSALESMAN76981981-9-28125014003010147934MILLERCLERK77821982-1-231300 101187788SCOTTANALYST75661987-4-193000 201217369SMITHCLERK79021980-12-17800 2013107844TURNERSALESMAN76981981-9-815000301437521WARDSALESMAN76981981-2-22125050030
2: row_number() over( order by 字段名1,字段名2,...字段名n ) 先排序再确定序号.
select row_number() over( order by ename ) as rm, t.* from emp t
行数RMEMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO117876ADAMSCLERK77881987-5-231100 20227499ALLENSALESMAN76981981-2-20160030030337698BLAKEMANAGER78391981-5-12850 30447782CLARKMANAGER78391981-6-92450 10557902FORDANALYST75661981-12-33000 20667900JAMESCLERK76981981-12-3950 30777566JONESMANAGER78391981-4-22975 20887839KINGPRESIDENT 1981-11-175000 10997654MARTINSALESMAN76981981-9-28125014003010107934MILLERCLERK77821982-1-231300 1011117788SCOTTANALYST75661987-4-193000 2012127369SMITHCLERK79021980-12-17800 2013137844TURNERSALESMAN76981981-9-8150003014147521WARDSALESMAN76981981-2-22125050030
3: 和上面的不同之处在于PARTITION分区.在每一个小分区内部取序号.
select row_number() over(PARTITION BY deptno order by sal ) as rm, t.* from emp t
行数RMEMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO117934MILLERCLERK77821982-1-231300 10227782CLARKMANAGER78391981-6-92450 10337839KINGPRESIDENT 1981-11-175000 10417369SMITHCLERK79021980-12-17800 20527876ADAMSCLERK77881987-5-231100 20637566JONESMANAGER78391981-4-22975 20747788SCOTTANALYST75661987-4-193000 20857902FORDANALYST75661981-12-33000 20917900JAMESCLERK76981981-12-3950 301027521WARDSALESMAN76981981-2-221250500301137654MARTINSALESMAN76981981-9-2812501400301247844TURNERSALESMAN76981981-9-815000301357499ALLENSALESMAN76981981-2-201600300301467698BLAKEMANAGER78391981-5-12850 30
4: rank()在这里表示针对每个部门员工的工资取序号.
select rank() over(PARTITION BY deptno order by sal ) as rnk, t.* from emp t;
行数RNKEMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO117934MILLERCLERK77821982-1-231300 10227782CLARKMANAGER78391981-6-92450 10337839KINGPRESIDENT 1981-11-175000 10417369SMITHCLERK79021980-12-17800 20527876ADAMSCLERK77881987-5-231100 20637566JONESMANAGER78391981-4-22975 20747788SCOTTANALYST75661987-4-193000 20847902FORDANALYST75661981-12-33000 20917900JAMESCLERK76981981-12-3950 301027521WARDSALESMAN76981981-2-221250500301127654MARTINSALESMAN76981981-9-2812501400301247844TURNERSALESMAN76981981-9-815000301357499ALLENSALESMAN76981981-2-201600300301467698BLAKEMANAGER78391981-5-12850 30
5: 从例子中可以看到dense_rank()和rank()的唯一区别就是:
dense_rank()中并列第二名后是第三名.
rank()中并列第二名后是第四名.
select dense_rank() over(PARTITION BY deptno order by sal ) as dense_rnk, t.* from emp t;
行数DENSE_RNKEMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO117934MILLERCLERK77821982-1-231300 10227782CLARKMANAGER78391981-6-92450 10337839KINGPRESIDENT 1981-11-175000 10417369SMITHCLERK79021980-12-17800 20527876ADAMSCLERK77881987-5-231100 20637566JONESMANAGER78391981-4-22975 20747788SCOTTANALYST75661987-4-193000 20847902FORDANALYST75661981-12-33000 20917900JAMESCLERK76981981-12-3950 301027521WARDSALESMAN76981981-2-221250500301127654MARTINSALESMAN76981981-9-2812501400301237844TURNERSALESMAN76981981-9-815000301347499ALLENSALESMAN76981981-2-201600300301457698BLAKEMANAGER78391981-5-12850 30
来自: http://www.blogjava.net/terry-zj/archive/2005/11/12/19431.html
以emp表为例:
1: rownum 最简单的序号 但是在order by之前就确定值.
select rownum,t.* from emp t order by ename
2: row_number() over( order by 字段名1,字段名2,...字段名n ) 先排序再确定序号.
select row_number() over( order by ename ) as rm, t.* from emp t
3: 和上面的不同之处在于PARTITION分区.在每一个小分区内部取序号.
select row_number() over(PARTITION BY deptno order by sal ) as rm, t.* from emp t
4: rank()在这里表示针对每个部门员工的工资取序号.
select rank() over(PARTITION BY deptno order by sal ) as rnk, t.* from emp t;
5: 从例子中可以看到dense_rank()和rank()的唯一区别就是:
dense_rank()中并列第二名后是第三名.
rank()中并列第二名后是第四名.
select dense_rank() over(PARTITION BY deptno order by sal ) as dense_rnk, t.* from emp t;
来自: http://www.blogjava.net/terry-zj/archive/2005/11/12/19431.html
- Oracle提供的序号函数
- Oracle提供的序号函数
- Oracle提供的序号函数
- Oracle提供的序号函数
- Oracle提供的序号函数
- oracle递归排序,返回排序号函数
- mqsql 排序并获取排序号,功能与oracle的rowrum函数类似.
- oracle提供的分析函数 cube(),rollup(),grouping sets()
- oracle 一次获取序号多个值的写法
- Oracle提供的jniDoc
- Oracle使用row_number()函数查询时增加序号列
- Oracle使用row_number()函数查询时增加序号列
- mysql查询中实现oracle中的rownum函数的效果,返回每行查询结果的行序号
- Oracle函数总结1(提供示例)
- Oracle函数总结2(提供示例)
- oracle 自增序号
- oracle分组序号
- oracle提供的oradim实用工具
- 机器的方式,人的方式--假如人工智能真的实现
- 机器的方式,人的方式--总结
- 众浏览器对IE的围攻--UNIX哲学的应用
- dotnet(C#)面试题大全
- 世界不是对称的
- Oracle提供的序号函数
- 真正并行计算的难度(附-真正AI的难度)
- 圣诞遐想--上帝的作用
- 笔记
- 一个java写的贪吃蛇程序
- 给CListCtrl添加右键菜单
- 一个java写的弹球小游戏
- IT该进外企还是国企
- February, 9