1. 程式人生 > >Oracle資料庫表中查詢最大值和第二大值

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

我們以機構表為例,機構表中的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 ROWNUM r,id from(select to_number(id) as id from ORGANIZATION ORDER BY id desc);


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

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,仍不符合條件,直至遍歷完所有資料,都無資料返回。