官方文档:http://docs.oracle.com/database/121/DWHSG/analysis.htm#DWHSG9188
在12c之前,只能通过一些间接手段来获取前N行的结果,如:rownum。在12c中一切变的很简单,
通过FETCH FIRST|NEXT|PERCENT可以直接得到。
[ OFFSET offset { ROW | ROWS } ]
[ FETCH { FIRST | NEXT } [ { rowcount | percent PERCENT } ]
{ ROW | ROWS } { ONLY | WITH TIES } ]
举例:
1.创建表,插入数据
create table members(name varchar2(50),sal number); insert into members values('a',10000); insert into members values('b',9000); insert into members values('c',8000); insert into members values('d',8500); insert into members values('e',6000); insert into members values('f',6505); insert into members values('g',5000); insert into members values('h',3000); insert into members values('i',1800); insert into members values('j',5000);
2.取工资排名前七的记录
SQL> SELECT name,sal from members ORDER BY SAL DESC FETCH FIRST 7 ROWS ONLY; NAME SAL ---------- ---------- a10000 b 9000 d 8500 c 8000 f 6505 e 6000 g 5000 7 rows selected.
可以看到,实际上是有两个5000工资的员工,但是只显示一个。可以通过WITH TIES语句来获取
SQL> SELECT name,sal from members ORDER BY SAL DESC FETCH FIRST 7 ROWS WITH TIES; NAME SAL ---------- ---------- a10000 b 9000 d 8500 c 8000 f 6505 e 6000 g 5000 j 5000 8 rows selected.
3.取工资前百分之70的记录
SQL> SELECT name,sal from members ORDER BY SAL DESC FETCH FIRST 70 PERCENT ROWS ONLY; NAME SAL ---------- ---------- a10000 b 9000 d 8500 c 8000 f 6505 e 6000 g 5000 7 rows selected.
同样要想返回满足最后一条记录的数据,需要WITH TIES子句
SQL> SELECT name,sal from members ORDER BY SAL DESC FETCH FIRST 70 PERCENT ROWS WITH TIES; NAME SAL ---------- ---------- a10000 b 9000 d 8500 c 8000 f 6505 e 6000 g 5000 j 5000 8 rows selected.
4.跳过前五条记录,返回后五条记录
SQL> SELECT name,sal from members ORDER BY SAL DESC OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY; NAME SAL ---------- ---------- e 6000 g 5000 j 5000 h 3000 i 1800
这些特性都可以用在PL/SQL块中。
版权声明:本文为博主原创文章,未经博主允许不得转载。
12c TOP-N
- 上一篇:12c RMAN 表级恢复
- 下一篇:12C 用户管理与赋权