Oracle 分頁查詢與資料去重

2022-06-28 19:36:16 字數 1770 閱讀 8536

oracle下select語句每個結果集中都有乙個偽欄位(偽列)rownum存在。

rownum用來標識每條記錄的行號,行號從1開始,每次遞增1。

rownum是虛擬的順序值,前提是先排序

使用rownum需注意:

1.rownum的是在取資料的時候產生的序號 。當rownum和order by一起使用時,會首先選出符合rownum條件的記錄,然後再進行排序。

2.rownum在過濾時只能使用:n的話,過濾掉不滿足條件的,重新排又從1開始還是不滿足條件,再過濾最終會把所有資料都過濾掉

--

top n

--查詢工資排名前五的員工資訊

--思路:先按工資進行排序,再根據行號過濾留下前5條記錄

--因為sql語句的執行順序是先執行select返回查詢結果(行號在此時排好)再進行排序

--所以先需要用子查詢,返回排好序的查詢結果

select t.* ,rownum from

(select

*from emp order

by sal desc

)t where rownum<=5;

--分頁查詢

--查詢工資排名6~10的員工資訊

--思路:因為過濾完rownum欄位也會隨之變化,所以rownum不能使用大於號判斷

--所以還是要用子查詢先把行號排好定下來(需要用別名與外層查詢的rownum區分開來)

select

*from

(select t.*

, rownum rown

from

(select

*from emp order

by sal desc) t) where rown>

5and rown<=

10;

rowid 是oracle中每個表都有的乙個實際存在的乙個值,rowid的值是唯一的

--

先建立一張表往裡面插入幾條相同的資料

create

table test01(id number(3),name varchar2(10

))insert

into test01 values(123,'張三'

);insert

into test01 values(124,'李四'

);insert

into test01 values(125,'王五'

);insert

into test01 values(126,'張三'

);insert

into test01 values(127,'張三'

);insert

into test01 values(128,'李四'

);insert

into test01 values(129,'張三'

);--

資料去重

--思路:重複項進行分組,獲取每一組最小(或最大)的rowid,刪除不在此列的資料

oracle分頁與去重

查詢emp表中的記錄 分頁,每一頁顯示5條記錄 查詢第二頁的資料 select from select ename,sal,deptno,rownum rw from emp where rw 5 and rw 10 查詢第二頁的資料,並排序 將重覆記錄保留一條 如上,test2表中有4條重複資料,...

oracle 資料庫 去重查詢

oracle 資料庫多字段去重 方法介紹 distinct 關鍵字 group by row number over partition by 列 order by 列 desc 我的需求是 根據某幾列去重 查詢出去重後的全部資訊。最後我選擇的是第三種方法。我的想法 我想找出一種更簡單的方法去 實現...

Oracle 資料去重

假設資料表a,3個字段 mid 表id bjsj 報警時間 val 資料值 篩選出2019 09 20 2019 09 25時間段內記錄,每塊表的最後一條報警記錄。做法 按條件查詢出符合條件記錄,然後取每塊表的報警時間為最大的一條記錄。oracle資料庫提供了乙個函式 row number 用於給資...