12c新特性-top-n,fetch first with ties

语法:

[ OFFSET offset { ROW | ROWS} ]
[ FETCH { FIRST | NEXT }[ { rowcount | percent PERCENT } ]
    { ROW| ROWS } { ONLY | WITH TIES } ]

 

fetch 

返回 emp表中sal最小的5行

SCOTT@EMREP> select sal,ename from emp
2 order by sal
3 fetch first 5 rows only;

返回结果

      SAL ENAME
---------- ----------
       800 SMITH
       950 JAMES
      1100 ADAMS
      1250 WARD
      1250 MARTIN

关键字rows换成row,结果不变。first换成next结果不变。

SCOTT@EMREP> select sal,ename from emp order by sal fetch first 5 row only;

      SAL ENAME
---------- ----------
       800 SMITH
       950 JAMES
      1100 ADAMS
      1250 WARD
      1250 MARTIN
SCOTT@EMREP> select sal,ename from emp order by sal fetch next 5 row only;

SAL ENAME
---------- ----------
800 SMITH
950 JAMES
1100 ADAMS
1250 WARD
1250 MARTIN

offset 跳过sal最小的5行的,下5行数据:

offset不提供 percent功能

SCOTT@EMREP> select sal,ename from emp order by sal offset 5 rows fetch next 5 rows only;

       SAL ENAME
---------- ----------
      1300 MILLER
      1500 TURNER
      1600 ALLEN
      2450 CLARK
      2850 BLAKE

percent:薪水最少的5%的数据

SCOTT@EMREP> select sal,ename from emp order by sal fetch first 5 percent rows only;

       SAL ENAME
---------- ----------
       800 SMITH

SCOTT@EMREP> select sal,ename from emp order by sal fetch next 5 percent row only;

       SAL ENAME
---------- ----------
       800 SMITH

with ties 附加最后一行相同的薪水数据

SCOTT@EMREP> select sal,ename from emp order by sal fetch first 5 percent rows with ties;

 

row_limiting_clause允许限制返回行的个数。
可以指定offset和行数(或者百分比)来返回行。
可以使用这个子句去实现top-N报表。
为保证一致性,需要指定order_by 子句以确定排列顺序。

 

offset

使用这个子句可以指定跳跃多少行开始计数。
offset必须为一个数字。
如果指定一个附属,那么会被当作0来处理。
如果指定为null,或者数字大于结果集的行数,就会返回0行。
如果offset是一个小数,那么小数点会被截取。
如果没有offset子句,那么默认为0,从第一行开始计数。

 

fetch

使用这个子句去指定返回行的个数或者返回行的百分比。如果没有指定,那么所有的行都会被返回,开始行为offset+1。

percent/rowcount

使用rowcount去指定返回多少行。
rowcount必须为一个数字,如果指定了一个负数,那么rowcount会被当作0。如果rowcount大于以offset+1开始计数的所有行个数,那么所有的行都会被返回。
如果rowcount是一个小数,那么小数部分会被截断。如果rowcount为null,那么返回0行。
使用percent去指定返回总行数的百分比。必须为一个数字。如果指定为负数,那么会被当作0。
如果为null,那么返回0行。

ONLY | WITH TIES

指定only会返回明确的行数或者是百分比的行数。

如果指定with ties子句,那么拥有和最后一行相同的排序键值的行都会被fetch。如果指定了with ties子句,那么必须指定order by 。

如果没有指定order by,那么不会有附加的行被返回。

 

限制

row_limiting_clause子句的限制:
无法指定for update子句
无法包含序列的伪列currentval或者nextval
如果定义的查询语句中包含row_limiting_clause,那么无法在这之上创建增量刷新的物化视图

 

posted @ 2020-10-22 15:40  老王的农场  阅读(188)  评论(0编辑  收藏  举报