oracle中分組排序並取最大值

2021-09-05 11:39:58 字數 821 閱讀 8277

最近工作中需要聯合查詢幾個表中的資料,並且需要分組查詢並取得每個組中的最大值,使用到了乙個之前沒有用過的oracle函式,分組排序函式。

分組排序函式可以滿足以下需求:

1、要求取出按field1分組後,並在每組中按照field2排序;

2、亦或更加要求取出1中已經分組排序好的前多少行的資料

分組排序函式的用法:

1.row_number() over()

row_number()over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2排序,而此函式計算的值就表示每組內部排序後的順序編號(組內連續的唯一的)。

與rownum的區別在於:使用rownum進行排序的時候是先對結果集加入偽劣rownum然後再進行排序,而此函式在包含排序從句後是先排序再計算行號碼。row_number()和rownum差不多,功能更強一點(可以在各個分組內從1開始排序)。

2.rank() over()

rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內)

3.dense_rank() over()

dense_rank()也是連續排序,有兩個第二名時仍然跟著第三名。相比之下row_number是沒有重複值的。

我用到的是第乙個row_number() over()函式,要使用這個函式分組排序後獲取最大值的oracle語句:

select a,b from(select a,b,row_number()over(partition by a order by b desc)rownumber from tablename ) where rownumber =1

oracle中分組排序並取最大值

最近工作中需要聯合查詢幾個表中的資料,並且需要分組查詢並取得每個組中的最大值,使用到了乙個之前沒有用過的oracle函式,分組排序函式。分組排序函式可以滿足以下需求 1 要求取出按field1分組後,並在每組中按照field2排序 2 亦或更加要求取出1中已經分組排序好的前多少行的資料 分組排序函式...

oracle中分組排序統計

有3個函式可以實現 rank over dense over row number over 其中 over partition by order by 可以實現分組排序,給其設定別名 例如 num 後,加入條件 where num 1 可以實現只顯示每組排名第一的結果 rank 等函式用作記名次,...

Oracle 中分組排序取值的問題

建表語句 create table exam name varchar2 32 subject varchar2 32 score integer 資料 insert into exam values 趙柳 數學 71 insert into exam values 張三 數學 81 insert ...