限制 Top-N 查詢結果的記錄

在以前的版本中有多種間接手段來對頂部或底部記錄獲取 Top-N 查詢結果。而在 12c中,經過新的 FETCH FIRST|NEXT|PERCENT 語句簡化了這一過程並使其變得更爲直接。
        從 EMP 表檢索排名前 10 的工資記錄
        SQL> SELECT empno,ename,sal FROM emp ORDER BY SAL DESC FETCH FIRST 10 ROWS ONLY;

 EMPNO ENAME             SAL

7839 KING             5000
  7902 FORD             3000
  7566 JONES            2975
  7698 BLAKE            2850
  7782 CLARK            2450
  7499 ALLEN            1600
  7844 TURNER           1500
  7934 MILLER           1300
  7521 WARD             1250
  7654 MARTIN           1250

10 rows selected.
原方法
SQL> select * from (SELECT empno,ename,sal FROM emp ORDER BY SAL DESC) where rownum<11 ;ide

EMPNO ENAME             SAL

7839 KING             5000
  7902 FORD             3000
  7566 JONES            2975
  7698 BLAKE            2850
  7782 CLARK            2450
  7499 ALLEN            1600
  7844 TURNER           1500
  7934 MILLER           1300
  7521 WARD             1250
  7654 MARTIN           1250

10 rows selected.
從 EMP 表檢索排名從第2行日後的3行 的工資記錄(不包括第二行)
SQL> SELECT empno,ename,sal FROM emp ORDER BY SAL DESC offset 2 rows fetch next 3 rows only;fetch

EMPNO ENAME             SAL

7566 JONES            2975
  7698 BLAKE            2850
  7782 CLARK            2450

從 EMP 表中獲取排名前 10%的記錄
SQL> SELECT empno,ename,sal FROM emp ORDER BY SAL DESC FETCH FIRST 10 PERCENT rows only;code

EMPNO ENAME             SAL

7839 KING             5000
  7902 FORD             3000
獲取排名前 9的全部類似的記錄
SQL> SELECT empno,ename,sal FROM emp ORDER BY SAL DESC FETCH FIRST 9 ROWS  WITH TIES;

 EMPNO ENAME             SAL

7839 KING             5000
  7902 FORD             3000
  7566 JONES            2975
  7698 BLAKE            2850
  7782 CLARK            2450
  7499 ALLEN            1600
  7844 TURNER           1500
  7934 MILLER           1300
  7521 WARD             1250
  7654 MARTIN           1250

10 rows selected.it

相關文章
相關標籤/搜索