在Oracle結(jié)果集中添加自增序號(hào)的6種實(shí)現(xiàn)方式
Oracle 提供了多種方法來(lái)為查詢結(jié)果添加自增序號(hào),以下是常用的幾種方法:
1. 使用 ROWNUM 偽列(最基礎(chǔ)方法)
SELECT
ROWNUM AS row_num,
column1,
column2
FROM your_table
WHERE ROWNUM <= 100
ORDER BY some_column;注意:
ROWNUM 是在數(shù)據(jù)檢索后分配的,如果在 ORDER BY 之前使用,可能會(huì)得到非預(yù)期的結(jié)果。
2. 使用 ROW_NUMBER() 分析函數(shù)(推薦)
SELECT
ROW_NUMBER() OVER (ORDER BY some_column) AS row_num,
column1,
column2
FROM your_table;3. 使用 RANK() 或 DENSE_RANK() 函數(shù)(處理相同值情況)
-- RANK():相同值會(huì)有相同序號(hào),下一個(gè)不同值會(huì)跳過(guò)相應(yīng)位置
SELECT
RANK() OVER (ORDER BY some_column) AS rank_num,
column1,
column2
FROM your_table;
-- DENSE_RANK():相同值有相同序號(hào),但不會(huì)跳過(guò)序號(hào)
SELECT
DENSE_RANK() OVER (ORDER BY some_column) AS dense_rank_num,
column1,
column2
FROM your_table;4. 按分組添加序號(hào)
SELECT
ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS dept_rank,
employee_id,
name,
salary,
dept_id
FROM employees;5. 使用子查詢實(shí)現(xiàn)(兼容性更好的方法)
SELECT
ROWNUM AS row_num,
t.*
FROM (
SELECT column1, column2
FROM your_table
ORDER BY some_column
) t;6. 高級(jí)用法:分頁(yè)查詢帶序號(hào)
-- 11-20條記錄(第二頁(yè),每頁(yè)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;注意事項(xiàng)
- 性能考慮:分析函數(shù)通常比 ROWNUM 子查詢方法更高效
- 排序影響:確保 ORDER BY 子句正確,否則序號(hào)可能不符合預(yù)期
- 相同值處理:根據(jù)業(yè)務(wù)需求選擇 ROW_NUMBER()、RANK() 或 DENSE_RANK()
- 分區(qū)序號(hào):使用 PARTITION BY 可以為每個(gè)分組重新開始編號(hào)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
PL/SQL 日期時(shí)間類型函數(shù)及運(yùn)算
PL/SQL 日期時(shí)間類型函數(shù)及運(yùn)算...2007-03-03
Oracle數(shù)據(jù)庫(kù)賬號(hào)被鎖定解決方法
在Oracle數(shù)據(jù)庫(kù)操縱中,登錄Oracle賬號(hào)時(shí)提示失敗,并且Oracle賬號(hào)頻繁被鎖定,本文將介紹如何解決此問(wèn)題2012-11-11
在Linux系統(tǒng)上安裝部署Oracle?Database保姆級(jí)教程
因?yàn)楣拘枰獙?shù)據(jù)庫(kù)服務(wù)器切換成linux版本的,所以需要在linux系統(tǒng)下安裝oracle,下面這篇文章主要介紹了在Linux系統(tǒng)上安裝部署Oracle?Database保姆級(jí)教程的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2026-04-04
Linux虛擬機(jī)下安裝Oracle 11G教程圖文解說(shuō)
這篇文章主要介紹了Linux虛擬機(jī)下安裝Oracle 11G教程圖文詳解,本文文字圖解相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
Oracle數(shù)值型函數(shù)LN(y)的使用小結(jié)
本文詳細(xì)解析了LN函數(shù)的語(yǔ)法、返回值類型及基礎(chǔ)用法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07

