在Oracle结果集中添加自增序号的6种实现方式

 更新时间:2026年03月20日 08:47:12   作者:孟凡珅  
这篇文章主要介绍了在Oracle结果集中添加自增序号的6种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Oracle 提供了多种方法来为查询结果添加自增序号,以下是常用的几种方法:

1. 使用 ROWNUM 伪列(最基础方法)

SELECT 
    ROWNUM AS row_num,
    column1, 
    column2
FROM your_table
WHERE ROWNUM <= 100
ORDER BY some_column;

注意

ROWNUM 是在数据检索后分配的,如果在 ORDER BY 之前使用,可能会得到非预期的结果。

2. 使用 ROW_NUMBER() 分析函数(推荐)

SELECT 
    ROW_NUMBER() OVER (ORDER BY some_column) AS row_num,
    column1, 
    column2
FROM your_table;

3. 使用 RANK() 或 DENSE_RANK() 函数(处理相同值情况)

-- RANK():相同值会有相同序号,下一个不同值会跳过相应位置
SELECT 
    RANK() OVER (ORDER BY some_column) AS rank_num,
    column1, 
    column2
FROM your_table;

-- DENSE_RANK():相同值有相同序号,但不会跳过序号
SELECT 
    DENSE_RANK() OVER (ORDER BY some_column) AS dense_rank_num,
    column1, 
    column2
FROM your_table;

4. 按分组添加序号

SELECT 
    ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS dept_rank,
    employee_id,
    name,
    salary,
    dept_id
FROM employees;

5. 使用子查询实现(兼容性更好的方法)

SELECT 
    ROWNUM AS row_num,
    t.*
FROM (
    SELECT column1, column2
    FROM your_table
    ORDER BY some_column
) t;

6. 高级用法:分页查询带序号

-- 11-20条记录(第二页,每页10条)
SELECT * FROM (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY some_column) AS row_num,
        t.*
    FROM your_table t
)
WHERE row_num BETWEEN 11 AND 20;

注意事项

  • 性能考虑:分析函数通常比 ROWNUM 子查询方法更高效
  • 排序影响:确保 ORDER BY 子句正确,否则序号可能不符合预期
  • 相同值处理:根据业务需求选择 ROW_NUMBER()、RANK() 或 DENSE_RANK()
  • 分区序号:使用 PARTITION BY 可以为每个分组重新开始编号

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • oracle中ORA-12514问题解决方法

    oracle中ORA-12514问题解决方法

    安装了Oracle数据库,以前都是安装好就可以连接了,可是今天出现了一点小意外,遇到ORA-12514错误问题,今天就来介绍一下解决方法,感兴趣的可以了解一下
    2023-05-05
  • PL/SQL 日期时间类型函数及运算

    PL/SQL 日期时间类型函数及运算

    PL/SQL 日期时间类型函数及运算...
    2007-03-03
  • Oracle开发之窗口函数

    Oracle开发之窗口函数

    本文主要介绍Oracle窗口函数的用法,讲解全统计、滚动统计(累积/均值)、根据时间范围统计、first_value/last_value、比较相邻记录具体的使用方法,需要的朋友可以参考下。
    2016-05-05
  • oracle数据库冷备份的方法

    oracle数据库冷备份的方法

    oracle数据库脱机备份的实现方法与在使用oracle数据库脱机备份时的一些注意事项
    2013-11-11
  • Oracle数据库账号被锁定解决方法

    Oracle数据库账号被锁定解决方法

    在Oracle数据库操纵中,登录Oracle账号时提示失败,并且Oracle账号频繁被锁定,本文将介绍如何解决此问题
    2012-11-11
  • Oracle索引质量介绍和分析脚本分享

    Oracle索引质量介绍和分析脚本分享

    这篇文章主要介绍了Oracle索引质量介绍和分析脚本分享,索引质量的高低对数据库整体性能有着直接的影响,本文给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析脚本,需要的朋友可以参考下
    2014-09-09
  • 在Linux系统上安装部署Oracle Database保姆级教程

    在Linux系统上安装部署Oracle Database保姆级教程

    因为公司需要将数据库服务器切换成linux版本的,所以需要在linux系统下安装oracle,下面这篇文章主要介绍了在Linux系统上安装部署Oracle Database保姆级教程的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • Linux虚拟机下安装Oracle 11G教程图文解说

    Linux虚拟机下安装Oracle 11G教程图文解说

    这篇文章主要介绍了Linux虚拟机下安装Oracle 11G教程图文详解,本文文字图解相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Oracle数值型函数LN(y)的使用小结

    Oracle数值型函数LN(y)的使用小结

    本文详细解析了LN函数的语法、返回值类型及基础用法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • 如何查询占CPU高的oracle进程

    如何查询占CPU高的oracle进程

    oracle占用cpu过高怎么处理,本文将介绍有关oracle进程CPU占用率过高的问题,需要了解跟多的朋友可以参考下
    2012-11-11

最新评论