Oracle資料庫表中查詢最大值和第二大值

2021-07-31 20:11:57 字數 1700 閱讀 5137

我們以機構表為例,機構表中的id欄位是varchar2型別的,而不是number型別,所有要先轉換為number。

select to_number(id) as id from organization;

執行效果如下圖所示:

我們按降序排序來查詢,

select to_number(id) as id from organization order by id desc;

如下圖所示:

我們不使用order by,而用max()函式來獲取最大的值

select max(to_number(id)) from organization;

執行效果如下圖所示:我們得到最大值為33.

現在我們要找出第二大值,我們要使用到rownum,我們先查詢出最大值和第二大值。

select * from (select to_number(id) as id from organization order by id desc) where rownum<3;

執行效果如下圖所示:

有了最大值和第二大值,如何查詢出第二大值呢?

我們可以使用如下語句來檢視這些結果是如何排序的。

接下來,我們就可以在上面的基礎上稍作處理,就可以查詢出第二大值這條記錄了

select * from (select rownum r,id from(select to_number(id) as id from organization order by id desc)where rownum<3) e where e.r>1 ;

執行效果如下圖:

我們不能使用如下語句來得到第二大值:

select id from (select to_number(id) as id from organization order by id desc) where rownum<3 and rownum>=2

執行結果是空

這是為什麼呢?

因為rownum是oracle預處理字段,預設標序是1,只有記錄集已經滿足條件後才會進行後續編號。這樣你查詢organization  表時遍歷第一條資料時rownum是1,不符合條件,繼續遍歷到第二條資料rownum仍為1,仍不符合條件,直至遍歷完所有資料,都無資料返回。

oracle資料庫員工表查詢

孟子辰 2016 11 28 10 13 1 請從表emp中查詢工種是職員clerk或經理manager的雇員姓名 工資。select ename,sal from emp where job clerk or job manager 2 請在emp表中查詢部門號在10 30之間的雇員的姓名 部門號...

oracle 資料庫表結構查詢

oracle查詢使用者所有表的語句 select from all tab comments 查詢所有使用者的表,檢視等 select from user tab comments 查詢本使用者的表,檢視等 select from all col comments 查詢所有使用者的表的列名和注釋.s...

資料庫 oracle查詢表資訊

修改資料庫中一張表指定欄位的資料,該字段在其他表中也存在,需要同步修改 此時需要統計資料庫中所有包含該字段的表。獲取表字段 select from user tab columns where table name 使用者表 獲取表注釋 select from user tab comments w...