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. oracle中to_date函数详解

    to_date()与24小时制表示法及mm分钟的显示: 一.在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用"yyyy-MM-dd HH:mm:ss& ...

  2. Oracle数据库分组函数详解

    分组函数作用于一组数据,并对一组数据返回一个值. 常用的分组函数:AVG平均值,SUM求和,MIN最小值,MAX最大值,COUNT个数,WM_CONCAT字符串的拼接等. WM_CONCAT函数可用于 ...

  3. oracle 根节点函数,详解Oracle分析函数

    分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值.分析函数带有一个开窗函数over(),包含 ...

  4. Oracle中pivot函数详解

    [基本介绍] [格式]:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值)) [说明]:实现将指定字段的字段值转换为列的效果. [环境]:如下图是样例展示所使用的oracle ...

  5. oracle中sign函数详解

    在Oracle/PLSQL中, sign 函数返回一个数字的正负标志. 语法如下:sign( number ) number 要测试标志的数字. If number < 0, then sign ...

  6. Oracle 的next_day函数详解

    先放代码: --当前时间:2022-07-13,星期三 SELECT SYSDATE "星期3", NEXT_DAY(SYSDATE,1) "(星期日)", N ...

  7. 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. 三 ...

  8. Oracle中decode函数详解

    [函数格式]:         decode (         expression,         condition_01, result_01,         condition_02, ...

  9. Oracle中rollup函数详解

    [基本介绍] [格式]:group by rollup(字段1,字段2,字段3,...,字段n) [说明]:rollup主要用于分组汇总,如果rollup中有n个字段,则会分别按[字段1].[字段1, ...

最新文章

  1. qt 显示加速_新能源 | 吉利星越ePro上市 补贴后17.58万起售 加速更快油耗更低
  2. 人工智能改进传统云ERP的10种方法
  3. HBase 与 MapReduce 集成
  4. linq查询语句转mongodb
  5. shell脚本中执行mysql 语句,去除warning using a password on the command line interface can be insecure信息...
  6. Linux服务集群部署实战--MySQL、Redis、ES、RocketMQ、Zookeeper
  7. 深入分析Nginx 502 Bad Gateway和Nginx 504 Gateway(亲测)
  8. Java面向对象(4) ——多态
  9. python搜索引擎和爬虫框架介绍
  10. DELL戴尔服务器RAID磁盘阵列默认识别更换后的硬盘
  11. 视频教程-ArcGIS与CASS在地籍建库中的结合应用-大数据
  12. java+ selenium截图
  13. 1.44TFT彩屏字体翻转,扫描方式的改变
  14. 注意力机制-CA注意力-Coordinate attention
  15. 基于ROS机器人的3D物体识别与三维重建(四)视觉SLAM基础(十四讲学习记录)
  16. [java编程题]买苹果
  17. 硬件产品开发:外包五要素和外包地图
  18. 阿里云服务(三)—对象存储OSS和块存储
  19. SharePoint On Premise 数据迁移到 SharePoint Online的几点考虑
  20. DHD刷机步骤(Rooted)

热门文章

  1. java开发用i5还是i7,i7比i5更强!为什么内行人都选i5而不选i7?看完瞬间懂了
  2. 回收站永久删除的文件还能恢复吗?电脑回收站删除的文件怎么恢复
  3. (九)play之yabe项目【发表博文】
  4. 「逗你一笑」一些关于程序员的笑话
  5. 做毕业设计,前端部分你需要掌握的5个核心技能
  6. 按关键字搜索商品 API 返回值说明
  7. 拉丝机程序7+1,使用三菱FX3U系列PLC和昆仑通态触摸屏
  8. crud有啥意思,快来用代码生成器偷懒吧
  9. MySQL(二):详解MyIsam表锁
  10. NUXT.JS学习笔记