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