在 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;

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

-- 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;

注意事项

  1. 性能考虑:分析函数通常比 ROWNUM 子查询方法更高效

  2. 排序影响:确保 ORDER BY 子句正确,否则序号可能不符合预期

  3. 相同值处理:根据业务需求选择 ROW_NUMBER()、RANK() 或 DENSE_RANK()

  4. 分区序号:使用 PARTITION BY 可以为每个分组重新开始编号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值