Oracle 序号函数
Oracle提供的序号函数:
以emp表为例:
1: rownum 最简单的序号 但是在order by之前就确定值.
select rownum,t.* from emp t order by ename
| 行数 | ROWNUM | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
| 1 | 11 | 7876 | ADAMS | CLERK | 7788 | 1987-5-23 | 1100 | 20 | |
| 2 | 2 | 7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600 | 300 | 30 |
| 3 | 6 | 7698 | BLAKE | MANAGER | 7839 | 1981-5-1 | 2850 | 30 | |
| 4 | 7 | 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450 | 10 | |
| 5 | 13 | 7902 | FORD | ANALYST | 7566 | 1981-12-3 | 3000 | 20 | |
| 6 | 12 | 7900 | JAMES | CLERK | 7698 | 1981-12-3 | 950 | 30 | |
| 7 | 4 | 7566 | JONES | MANAGER | 7839 | 1981-4-2 | 2975 | 20 | |
| 8 | 9 | 7839 | KING | PRESIDENT | 1981-11-17 | 5000 | 10 | ||
| 9 | 5 | 7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250 | 1400 | 30 |
| 10 | 14 | 7934 | MILLER | CLERK | 7782 | 1982-1-23 | 1300 | 10 | |
| 11 | 8 | 7788 | SCOTT | ANALYST | 7566 | 1987-4-19 | 3000 | 20 | |
| 12 | 1 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | 20 | |
| 13 | 10 | 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500 | 0 | 30 |
| 14 | 3 | 7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250 | 500 | 30 |
2: row_number() over( order by 字段名1,字段名2,...字段名n ) 先排序再确定序号.
select row_number() over( order by ename ) as rm, t.* from emp t
| 行数 | RM | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
| 1 | 1 | 7876 | ADAMS | CLERK | 7788 | 1987-5-23 | 1100 | 20 | |
| 2 | 2 | 7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600 | 300 | 30 |
| 3 | 3 | 7698 | BLAKE | MANAGER | 7839 | 1981-5-1 | 2850 | 30 | |
| 4 | 4 | 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450 | 10 | |
| 5 | 5 | 7902 | FORD | ANALYST | 7566 | 1981-12-3 | 3000 | 20 | |
| 6 | 6 | 7900 | JAMES | CLERK | 7698 | 1981-12-3 | 950 | 30 | |
| 7 | 7 | 7566 | JONES | MANAGER | 7839 | 1981-4-2 | 2975 | 20 | |
| 8 | 8 | 7839 | KING | PRESIDENT | 1981-11-17 | 5000 | 10 | ||
| 9 | 9 | 7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250 | 1400 | 30 |
| 10 | 10 | 7934 | MILLER | CLERK | 7782 | 1982-1-23 | 1300 | 10 | |
| 11 | 11 | 7788 | SCOTT | ANALYST | 7566 | 1987-4-19 | 3000 | 20 | |
| 12 | 12 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | 20 | |
| 13 | 13 | 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500 | 0 | 30 |
| 14 | 14 | 7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250 | 500 | 30 |
3: 和上面的不同之处在于PARTITION分区.在每一个小分区内部取序号.
select row_number() over(PARTITION BY deptno order by sal ) as rm, t.* from emp t
| 行数 | RM | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
| 1 | 1 | 7934 | MILLER | CLERK | 7782 | 1982-1-23 | 1300 | 10 | |
| 2 | 2 | 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450 | 10 | |
| 3 | 3 | 7839 | KING | PRESIDENT | 1981-11-17 | 5000 | 10 | ||
| 4 | 1 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | 20 | |
| 5 | 2 | 7876 | ADAMS | CLERK | 7788 | 1987-5-23 | 1100 | 20 | |
| 6 | 3 | 7566 | JONES | MANAGER | 7839 | 1981-4-2 | 2975 | 20 | |
| 7 | 4 | 7788 | SCOTT | ANALYST | 7566 | 1987-4-19 | 3000 | 20 | |
| 8 | 5 | 7902 | FORD | ANALYST | 7566 | 1981-12-3 | 3000 | 20 | |
| 9 | 1 | 7900 | JAMES | CLERK | 7698 | 1981-12-3 | 950 | 30 | |
| 10 | 2 | 7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250 | 500 | 30 |
| 11 | 3 | 7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250 | 1400 | 30 |
| 12 | 4 | 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500 | 0 | 30 |
| 13 | 5 | 7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600 | 300 | 30 |
| 14 | 6 | 7698 | BLAKE | MANAGER | 7839 | 1981-5-1 | 2850 | 30 |
4: rank()在这里表示针对每个部门员工的工资取序号.
select rank() over(PARTITION BY deptno order by sal ) as rnk, t.* from emp t;
| 行数 | RNK | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
| 1 | 1 | 7934 | MILLER | CLERK | 7782 | 1982-1-23 | 1300 | 10 | |
| 2 | 2 | 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450 | 10 | |
| 3 | 3 | 7839 | KING | PRESIDENT | 1981-11-17 | 5000 | 10 | ||
| 4 | 1 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | 20 | |
| 5 | 2 | 7876 | ADAMS | CLERK | 7788 | 1987-5-23 | 1100 | 20 | |
| 6 | 3 | 7566 | JONES | MANAGER | 7839 | 1981-4-2 | 2975 | 20 | |
| 7 | 4 | 7788 | SCOTT | ANALYST | 7566 | 1987-4-19 | 3000 | 20 | |
| 8 | 4 | 7902 | FORD | ANALYST | 7566 | 1981-12-3 | 3000 | 20 | |
| 9 | 1 | 7900 | JAMES | CLERK | 7698 | 1981-12-3 | 950 | 30 | |
| 10 | 2 | 7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250 | 500 | 30 |
| 11 | 2 | 7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250 | 1400 | 30 |
| 12 | 4 | 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500 | 0 | 30 |
| 13 | 5 | 7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600 | 300 | 30 |
| 14 | 6 | 7698 | BLAKE | MANAGER | 7839 | 1981-5-1 | 2850 | 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_RNK | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
| 1 | 1 | 7934 | MILLER | CLERK | 7782 | 1982-1-23 | 1300 | 10 | |
| 2 | 2 | 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450 | 10 | |
| 3 | 3 | 7839 | KING | PRESIDENT | 1981-11-17 | 5000 | 10 | ||
| 4 | 1 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | 20 | |
| 5 | 2 | 7876 | ADAMS | CLERK | 7788 | 1987-5-23 | 1100 | 20 | |
| 6 | 3 | 7566 | JONES | MANAGER | 7839 | 1981-4-2 | 2975 | 20 | |
| 7 | 4 | 7788 | SCOTT | ANALYST | 7566 | 1987-4-19 | 3000 | 20 | |
| 8 | 4 | 7902 | FORD | ANALYST | 7566 | 1981-12-3 | 3000 | 20 | |
| 9 | 1 | 7900 | JAMES | CLERK | 7698 | 1981-12-3 | 950 | 30 | |
| 10 | 2 | 7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250 | 500 | 30 |
| 11 | 2 | 7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250 | 1400 | 30 |
| 12 | 3 | 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500 | 0 | 30 |
| 13 | 4 | 7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600 | 300 | 30 |
| 14 | 5 | 7698 | BLAKE | MANAGER | 7839 | 1981-5-1 | 2850 | 30 |
Oracle 序号函数的更多相关文章
- MSSQL和Oracle常用函数比对
数学函数 序号 函数功能 SQL Server用法 Oracle用法 1 绝对值 select abs(-1) value select abs(-1) value from dual 2 取整(大) ...
- Oracle分析函数——函数列表
--------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...
- oracle add_months函数
oracle add_months函数 add_months 函数主要是对日期函数进行操作,举例子进行说明 add_months 有两个参数,第一个参数是日期,第二个参数是对日期进行加减的数字(以月为 ...
- Oracle to_date()函数的用法
Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...
- Oracle over函数
Oracle over函数 SQL code: sql over的作用及用法RANK ( ) OVER ( [query_partition_clause] order_by_clause )DE ...
- Oracle常用函数
前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...
- Oracle SQL函数
Oracle将函数大致分为单行函数,聚合函数和分析函数. 单行函数分为字符函数,日期函数,转换函数,数字函数,通用函数,decode函数 一.字符函数 1)大小写控制函数 01.Lower() 全部小 ...
- Oracle trunc()函数的用法
Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...
- oracle中函数和存储过程的区别和联系【转载竹沥半夏】
oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...
随机推荐
- 一起来学Spring Cloud | 第七章:分布式配置中心(Spring Cloud Config)
上一章节,我们讲解了服务网关zuul,本章节我们从git和本地两种存储配置信息的方式来讲解springcloud的分布式配置中心-Spring Cloud Config. 一.Spring Cloud ...
- 如何申请百度地图用户Key
打开网页http://lbsyun.baidu.com/,进入百度地图开发平台. 单击[登录],登录百度账号.如果您还没有百度账号,单击箭头处[立即注册]注册百度账号. 登录完成后,单击右上角箭头处[ ...
- 在laravel框架中使用模板继承来进行更方便的布局
html中有很多东西是重复的,这是需要用到laravel的模板继承,来完成这样的简化操作. 父模板 既然时模板继承,那么就首先有一个父模板,父模板类似网页html中的头部和尾部,但又有一些不一样. / ...
- python技巧 — pip install 错误,超时
jieba库安装失败 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba wordcloud库安装失败 pip instal ...
- Linux安装centos
在虚拟机上安装centos 虚拟机使用win10自带的hyper-v非常好用 centos下载地址http://mirrors.aliyun.com/centos/7.6.1810/isos/x86_ ...
- as3鱼眼放大镜
package { //hi.baidu.com/inuko //bitmapdata fisheye magnifier //原创代码,如有雷同,纯属巧合 /* 本例是使用近似算法,只是最简单的鱼眼 ...
- JavaScript中数组的key-value在对象中倒装的妙用
对于数组的去重.寻找指定元素的索引,通常我们都是通过遍历来解决,但是在某些应用场景下,将数组的value-key进行倒装,也即将value当做对象的key,key当做对象value,可以极大降低算法的 ...
- FastDFS安装指南
FastDFS安装指南 提前准备好的文件资料: 1.FastDFS--tracker安装 1.1 FastDFS安装环境 FastDFS是C语言开发,建议在linux上运行,本教程使用Centos7. ...
- 5_PHP数组_3_数组处理函数及其应用_4_数组和变量间的转换函数
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组和变量间的转换函数 1. list() 语言结构 程序: <?php $info = array('co ...
- 深入理解JVM(六) -- GC执行原则和方案
上篇文章中,我们了解了Java虚拟机垃圾回收的思路和策略,这篇文章我们将了解Java是如何实现高效的回收算法的. 我们需要了解,内存回收必须要保证“一致性”,意思就是在执行GC分析的时候,系统看起来要 ...