row_ number over函數的基本用法

函數語法: ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)oracle

函數做用:從1開始,爲按組排序的每條記錄添加一個序列號 函數只能用於select和order by子句中 不能用在where子句函數

不分組排序排序

不進行分組時語法爲ROW_NUMBER() OVER(ORDER BY COLUMN),如:it

有一個表A就一個字段num,數據以下io

numselect

10語法

20數據

30查詢

查詢語句爲select row_number() over(order by num) as idx,num from A

結果以下

num idx

10 1

20 2

30 3

分組排序

分組的話ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)表示根據COL1分組,在分組內部根據COL2排序,

而此函數的結果值就表示每組內部排序後的順序編號(組內連續的唯一的)

表employee有數據以下

empid deptid salary

1 10 5500.00

2 10 4500.00

3 20 1900.00

4 20 4800.00

查詢語句爲:select *,row_number() over(partition by deptid order by salary desc) rank from employee

結果以下

empid deptid salary rank

1 10 5500.00 1

2 10 4500.00 2

4 20 4800.00 1

3 20 1900.00 2

比較

能夠看到這個函數不分組時的做用oracle自帶row_num也能完成,差異就是row_num從0開始。分組排序這個功能就比較強大

另外還有兩個相似函數rank() over() 和dense_rank() over()

區別就是若是排序字段有重複值

row_number()函數仍是1 2 3排下去

rank() over()則會出現 1 1 3

dense_rank() over() 則會出現 1 1 2

這三種狀況 就是給的序號不同

相關文章
相關標籤/搜索