Oracle提供的序号函数:

1、rownum

rownum为最简单的序号 但是在order by之前就确定值。

举例:

select
rownum,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021
where year_name = '2016年'
and month_name = '12月'
order by cost_amt

执行结果如下:

行号 序号 年份名称 月份名称 岗位编码 岗位名称 试验类型编码 试验类型名称 产值
1 7 2016年 12月 6 微波器件检测岗 2 复验 22
2 3 2016年 12月 5 分立器件检测岗 2 复验 76
3 1 2016年 12月 4 阻容元件检测岗 1 筛选 214
4 5 2016年 12月 7 电连接器器件检测岗 2 复验 488
5 6 2016年 12月 8 机电元件检测岗 2 复验 488
6 4 2016年 12月 6 微波器件检测岗 1 筛选 633
7 8 2016年 12月 5 分立器件检测岗 1 筛选 817
8 9 2016年 12月 8 机电元件检测岗 1 筛选 817
9 2 2016年 12月 4 阻容元件检测岗 2 复验 870

由此可见序号是在order by 产值之前就已经确定的。

2、row_number()

2.1、row_number() over( order by 字段名1,字段名2,…字段名n )

先排序再确定序号

举例:

select
row_number() over( order by  cost_amt)  as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021 a
where year_name = '2016年'

执行结果如下:

行号 序号 年份名称 月份名称 岗位编码 岗位名称 试验类型编码 试验类型名称 产值
1 1 2016年 12月 6 微波器件检测岗 2 复验 22
2 2 2016年 11月 7 电连接器器件检测岗 2 复验 57
3 3 2016年 12月 5 分立器件检测岗 2 复验 76
4 4 2016年 12月 4 阻容元件检测岗 1 筛选 214
5 5 2016年 11月 6 微波器件检测岗 1 筛选 388
6 6 2016年 11月 4 阻容元件检测岗 2 复验 391
7 7 2016年 12月 7 电连接器器件检测岗 2 复验 488
8 8 2016年 12月 8 机电元件检测岗 2 复验 488
9 9 2016年 12月 6 微波器件检测岗 1 筛选 633
10 10 2016年 11月 8 机电元件检测岗 1 筛选 640
11 11 2016年 11月 5 分立器件检测岗 2 复验 795
12 12 2016年 11月 6 微波器件检测岗 2 复验 802
13 13 2016年 12月 8 机电元件检测岗 1 筛选 817
14 14 2016年 12月 5 分立器件检测岗 1 筛选 817
15 15 2016年 12月 4 阻容元件检测岗 2 复验 870
16 16 2016年 11月 5 分立器件检测岗 1 筛选 874
17 17 2016年 11月 8 机电元件检测岗 2 复验 874

由此可见序号是在 order by 排序之后产生的。

2.2、row_number() over(partition by 字段名1,字段名2,…字段名n order by 字段名1,字段名2,…字段名n )

先排序再确定序号,会根据 partition 分区,在每一个小分区内部取序号

举例:

select
row_number() over(partition by month_name order by  cost_amt)  as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021 a
where year_name = '2016年'

执行结果如下:

行号 序号 年份名称 月份名称 岗位编码 岗位名称 试验类型编码 试验类型名称 产值
1 1 2016年 11月 7 电连接器器件检测岗 2 复验 57
2 2 2016年 11月 6 微波器件检测岗 1 筛选 388
3 3 2016年 11月 4 阻容元件检测岗 2 复验 391
4 4 2016年 11月 8 机电元件检测岗 1 筛选 640
5 5 2016年 11月 5 分立器件检测岗 2 复验 795
6 6 2016年 11月 6 微波器件检测岗 2 复验 802
7 7 2016年 11月 8 机电元件检测岗 2 复验 874
8 8 2016年 11月 5 分立器件检测岗 1 筛选 874
9 9 2016年 11月 4 阻容元件检测岗 1 筛选 884
10 1 2016年 12月 6 微波器件检测岗 2 复验 22
11 2 2016年 12月 5 分立器件检测岗 2 复验 76
12 3 2016年 12月 4 阻容元件检测岗 1 筛选 214
13 4 2016年 12月 8 机电元件检测岗 2 复验 488
14 5 2016年 12月 7 电连接器器件检测岗 2 复验 488
15 6 2016年 12月 6 微波器件检测岗 1 筛选 633
16 7 2016年 12月 8 机电元件检测岗 1 筛选 817
17 8 2016年 12月 5 分立器件检测岗 1 筛选 817
18 9 2016年 12月 4 阻容元件检测岗 2 复验 870

由此可见序号是在 order by 排序之后产生的,且11月份和12月份在不同的分区,所以会有单独的排序。

3、rank()

rank()和row_number() 函数用法类似,及与**over( order by 字段名1,字段名2,…字段名n )row_number() over(partition by 字段名1,字段名2,…字段名n order by 字段名1,字段名2,…字段名n )**结合使用,但是rank()生成的序号是同值同序的不连续序号,即如果出现相同的值,那么序号是一样的。

3.1、rank() over( order by 字段名1,字段名2,…字段名n )

先排序,再生成序号,遇到重复的值,序号是一样的,且会占据一个位置,比如,两个1,下个就是3。

举例:

select
rank() over(order by  cost_amt)  as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021 a
where year_name = '2016年'

执行结果如下:

行号 序号 年份名称 月份名称 岗位编码 岗位名称 试验类型编码 试验类型名称 产值
1 1 2016年 12月 6 微波器件检测岗 2 复验 22
2 2 2016年 11月 7 电连接器器件检测岗 2 复验 57
3 3 2016年 12月 5 分立器件检测岗 2 复验 76
4 4 2016年 12月 4 阻容元件检测岗 1 筛选 214
5 5 2016年 11月 6 微波器件检测岗 1 筛选 388
6 6 2016年 11月 4 阻容元件检测岗 2 复验 391
7 7 2016年 12月 7 电连接器器件检测岗 2 复验 488
8 7 2016年 12月 8 机电元件检测岗 2 复验 488
9 9 2016年 12月 6 微波器件检测岗 1 筛选 633
10 10 2016年 11月 8 机电元件检测岗 1 筛选 640
11 11 2016年 11月 5 分立器件检测岗 2 复验 795
12 12 2016年 11月 6 微波器件检测岗 2 复验 802
13 13 2016年 12月 8 机电元件检测岗 1 筛选 817
14 13 2016年 12月 5 分立器件检测岗 1 筛选 817
15 15 2016年 12月 4 阻容元件检测岗 2 复验 870
16 16 2016年 11月 5 分立器件检测岗 1 筛选 874
17 16 2016年 11月 8 机电元件检测岗 2 复验 874
18 18 2016年 11月 4 阻容元件检测岗 1 筛选 884

以上例子中,第七行和第八行的值都是488,所以序号都是7,下一个就是9。

3.2、rank() over(partition by 字段名1,字段名2,…字段名n order by 字段名1,字段名2,…字段名n )

先排序再确定序号,会根据 partition 分区,在每一个小分区内部取序号,序号同值同序不连续

举例:

select
rank() over(partition by month_name order by  cost_amt)  as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021 a
where year_name = '2016年'

执行结果如下:

行号 序号 年份名称 月份名称 岗位编码 岗位名称 试验类型编码 试验类型名称 产值
1 1 2016年 11月 7 电连接器器件检测岗 2 复验 57
2 2 2016年 11月 6 微波器件检测岗 1 筛选 388
3 3 2016年 11月 4 阻容元件检测岗 2 复验 391
4 4 2016年 11月 8 机电元件检测岗 1 筛选 640
5 5 2016年 11月 5 分立器件检测岗 2 复验 795
6 6 2016年 11月 6 微波器件检测岗 2 复验 802
7 7 2016年 11月 8 机电元件检测岗 2 复验 874
8 7 2016年 11月 5 分立器件检测岗 1 筛选 874
9 9 2016年 11月 4 阻容元件检测岗 1 筛选 884
10 1 2016年 12月 6 微波器件检测岗 2 复验 22
11 2 2016年 12月 5 分立器件检测岗 2 复验 76
12 3 2016年 12月 4 阻容元件检测岗 1 筛选 214
13 4 2016年 12月 8 机电元件检测岗 2 复验 488
14 4 2016年 12月 7 电连接器器件检测岗 2 复验 488
15 6 2016年 12月 6 微波器件检测岗 1 筛选 633
16 7 2016年 12月 8 机电元件检测岗 1 筛选 817
17 7 2016年 12月 5 分立器件检测岗 1 筛选 817
18 9 2016年 12月 4 阻容元件检测岗 2 复验 870

4、dense_rank()

dense_rank()与rank()的区别在于,dense_rank()生成的序号是连续的。

4.1、dense_rank() over( order by 字段名1,字段名2,…字段名n )

举例:

select
dense_rank() over(order by  cost_amt)  as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021 a
where year_name = '2016年'

执行结果如下:

行号 序号 年份名称 月份名称 岗位编码 岗位名称 试验类型编码 试验类型名称 产值
1 1 2016年 12月 6 微波器件检测岗 2 复验 22
2 2 2016年 11月 7 电连接器器件检测岗 2 复验 57
3 3 2016年 12月 5 分立器件检测岗 2 复验 76
4 4 2016年 12月 4 阻容元件检测岗 1 筛选 214
5 5 2016年 11月 6 微波器件检测岗 1 筛选 388
6 6 2016年 11月 4 阻容元件检测岗 2 复验 391
7 7 2016年 12月 7 电连接器器件检测岗 2 复验 488
8 7 2016年 12月 8 机电元件检测岗 2 复验 488
9 8 2016年 12月 6 微波器件检测岗 1 筛选 633
10 9 2016年 11月 8 机电元件检测岗 1 筛选 640
11 10 2016年 11月 5 分立器件检测岗 2 复验 795
12 11 2016年 11月 6 微波器件检测岗 2 复验 802
13 12 2016年 12月 8 机电元件检测岗 1 筛选 817
14 12 2016年 12月 5 分立器件检测岗 1 筛选 817
15 13 2016年 12月 4 阻容元件检测岗 2 复验 870
16 14 2016年 11月 5 分立器件检测岗 1 筛选 874
17 14 2016年 11月 8 机电元件检测岗 2 复验 874
18 15 2016年 11月 4 阻容元件检测岗 1 筛选 884
4.2、dense_rank() over(partition by 字段名1,字段名2,…字段名n order by 字段名1,字段名2,…字段名n )

举例:

select
dense_rank() over(partition by month_name order by  cost_amt)  as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021 a
where year_name = '2016年'

执行结果如下:

行号 序号 年份名称 月份名称 岗位编码 岗位名称 试验类型编码 试验类型名称 产值
1 1 2016年 11月 7 电连接器器件检测岗 2 复验 57
2 2 2016年 11月 6 微波器件检测岗 1 筛选 388
3 3 2016年 11月 4 阻容元件检测岗 2 复验 391
4 4 2016年 11月 8 机电元件检测岗 1 筛选 640
5 5 2016年 11月 5 分立器件检测岗 2 复验 795
6 6 2016年 11月 6 微波器件检测岗 2 复验 802
7 7 2016年 11月 8 机电元件检测岗 2 复验 874
8 7 2016年 11月 5 分立器件检测岗 1 筛选 874
9 8 2016年 11月 4 阻容元件检测岗 1 筛选 884
10 1 2016年 12月 6 微波器件检测岗 2 复验 22
11 2 2016年 12月 5 分立器件检测岗 2 复验 76
12 3 2016年 12月 4 阻容元件检测岗 1 筛选 214
13 4 2016年 12月 8 机电元件检测岗 2 复验 488
14 4 2016年 12月 7 电连接器器件检测岗 2 复验 488
15 5 2016年 12月 6 微波器件检测岗 1 筛选 633
16 6 2016年 12月 8 机电元件检测岗 1 筛选 817
17 6 2016年 12月 5 分立器件检测岗 1 筛选 817
18 7 2016年 12月 4 阻容元件检测岗 2 复验 870

总结:

select
rownum as xuhao1,/*order by 之前生成的序号*/
row_number() over(order by  cost_amt)  xuhao2,/*先排序 然后生成连续序号*/
row_number() over(partition by month_name order by  cost_amt)  as xuhao3,/*先分区 再排序 然后生成连续序号*/
rank() over(order by  cost_amt)  as xuhao4,/*先排序 然后生成同值同序不连续序号*/
rank() over(partition by month_name order by  cost_amt)  as xuhao5,/*先分区 再排序 然后生成同值同序不连续序号*/
dense_rank() over(order by  cost_amt)  as xuhao6,/*先排序 然后生成同值同序连续序号*/
dense_rank() over(partition by month_name order by  cost_amt)  as xuhao7,/*先分区 再排序 然后生成同值同序连续序号*/
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021 a
where year_name = '2016年'

执行结果如下:

序号1 序号2 序号3 序号4 序号5 序号6 序号7 年份名称 月份名称 岗位编码 岗位名称 试验类型编码 试验类型名称 产值
9 1 1 1 1 1 1 2016年 12月 6 微波器件检测岗 2 复验 22
12 2 1 2 1 2 1 2016年 11月 7 电连接器器件检测岗 2 复验 57
4 3 2 3 2 3 2 2016年 12月 5 分立器件检测岗 2 复验 76
1 4 3 4 3 4 3 2016年 12月 4 阻容元件检测岗 1 筛选 214
14 5 2 5 2 5 2 2016年 11月 6 微波器件检测岗 1 筛选 388
13 6 3 6 3 6 3 2016年 11月 4 阻容元件检测岗 2 复验 391
7 7 5 7 4 7 4 2016年 12月 7 电连接器器件检测岗 2 复验 488
8 8 4 7 4 7 4 2016年 12月 8 机电元件检测岗 2 复验 488
5 9 6 9 6 8 5 2016年 12月 6 微波器件检测岗 1 筛选 633
10 10 4 10 4 9 4 2016年 11月 8 机电元件检测岗 1 筛选 640
15 11 5 11 5 10 5 2016年 11月 5 分立器件检测岗 2 复验 795
6 12 6 12 6 11 6 2016年 11月 6 微波器件检测岗 2 复验 802
16 13 8 13 7 12 6 2016年 12月 5 分立器件检测岗 1 筛选 817
18 14 7 13 7 12 6 2016年 12月 8 机电元件检测岗 1 筛选 817
3 15 9 15 9 13 7 2016年 12月 4 阻容元件检测岗 2 复验 870
17 16 7 16 7 14 7 2016年 11月 8 机电元件检测岗 2 复验 874
11 17 8 16 7 14 7 2016年 11月 5 分立器件检测岗 1 筛选 874
2 18 9 18 9 15 8 2016年 11月 4 阻容元件检测岗 1 筛选 884

Oracle排序函数详解相关推荐

  1. Python3 list 排序函数详解

    Python3 list 排序函数详解 一.           列表的sort排序函数 函数原型: list.sort(key=None,reverse=False) 函数功能: 对原列表进行排序, ...

  2. Oracle 分组排序函数详解 (row_number、rank、dense_rank)

    文章目录 1 概述 2 分类 2.1 排序函数 2.2 分组子句 1 概述 1. 完整格式(1) row_number() over(partition by 列1 order by 列2) 2. 三 ...

  3. Oracle Decode函数详解

    Oracle DECODE函数功能很强,下面就为您详细介绍Oracle DECODE函数的用法,希望可以让您对Oracle DECODE函数有更多的了解. Oracle DECODE函数 Oracle ...

  4. Oracle TRUNC 函数详解

    1.TRUNC 函数 Oracle TRUNC函数可以截取数字和日期类型: 2.TRUNC截取数字 TRUNC(number)函数返回n1截取到n2位小数.如果省略n2时,则n1截取到0位置(即截取所 ...

  5. oracle over函数详解

    转载:http://wenku.baidu.com/view/afcc6984d4d8d15abe234ed7.html 今天在javaeye上看到一道面试题,很多人都用over函数解决的 特意查了一 ...

  6. Oracle中to_Char详解,Oracle to_char 函数详解

    to_char,函数功能,就是将数值型或者日期型转化为字符型. 比如最简单的应用: Select TO_CHAR(1.0123) FROM DUAL Select TO_CHAR(123) FROM ...

  7. oracle instr函数详解

    INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始 到字符的结尾就结束. ...

  8. Oracle转换函数详解

    1.convert:字符串字符集转换 [函数格式]:convert(sourceString, charSetTo [, charSetFrom]) [参数说明]: sourceString:要进行转 ...

  9. C++ sort排序函数详解

    在很多应用中,排序都是至关重要的.基于C语言的经典排序算法有很多(冒泡排序.快速排序.插入排序.选择排序等) 一.sort函数描述 在基于C++的实际应用中(支持 < 运算符的语言)已经为我们提 ...

最新文章

  1. 主成分分析(PCA):通过图像可视化深入理解
  2. 妈妈再也不怕我不会画漂亮的图了!
  3. File System Auditor 安装全程截图
  4. Tecplot如何保存frame style 并调用frame style
  5. OpenAI发布CLIP模型快一年了,盘点那些CLIP相关让人印象深刻的工作
  6. python-元组,列表,字典常用方法
  7. struts2+spring+mybatis简单配置
  8. Jmeter中生成随机函数和使用csv文件数据
  9. vs中无法加入断点进行调试的解决方案
  10. 文章下载:关于窗宽窗位调节非常有用的论文《DICOM 医学图像窗口变换的加速算法》...
  11. Spring Cloud 尚硅谷阳哥学习笔记,每一行代码均有解释,适合快速上手,并配合尚硅谷视频食用
  12. 伴随矩阵例题_§6_伴随矩阵及习题_精品.ppt
  13. win7蓝屏_0x0000007e蓝屏代码怎么回事?Win7蓝屏0x0000007e解决方法
  14. 冰冻三尺非一日之寒,坚持,坚持,再坚持!
  15. 免费杀毒软件真的能杀木马吗?
  16. TTime::FormatL 详解
  17. Enolsoft PDF Converter with OCR Mac(PDF格式转换及OCR识别软件)
  18. 喜马拉雅主播工具软件:图片OCR文字识别自动转成mp3高品质语音文件
  19. 怎么判断机械表上满弦_机械手表上弦是什么意思,怎么看手表有没有上满弦
  20. for循环的三种写法

热门文章

  1. win10自带的xbox录屏截图按钮灰色不能用
  2. Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详解 .
  3. 【笔试总结】网易2019校招编程题-玩橡皮泥
  4. Winform从入门到精通(2)——Button(史上最全)
  5. sequence dose not exist
  6. docker学习(三):docker镜像分层原理及本地镜像推送到阿里云或私服
  7. 将对象序列化存到redis缓存中
  8. python怎么全选_python练习题之全选框全不选反选
  9. SpringClound05
  10. 惜败虾皮、快手、拼多多,终拿字节 offer