签到成功

知道了

CNDBA社区CNDBA社区

TOP-N限制查询结果

2016-09-09 10:19 2600 0 原创 Oracle 12C
作者: Expect-乐

 官方文档:http://docs.oracle.com/database/121/DWHSG/analysis.htm#DWHSG9188http://www.cndba.cn/Expect-le/article/251

  在12c之前,只能通过一些间接手段来获取前N行的结果,如:rownum。在12c中一切变的很简单,

通过FETCH FIRST|NEXT|PERCENT可以直接得到。

[ OFFSET offset { ROW | ROWS } ]

http://www.cndba.cn/Expect-le/article/251
http://www.cndba.cn/Expect-le/article/251

[ 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语句来获取

http://www.cndba.cn/Expect-le/article/251

  http://www.cndba.cn/Expect-le/article/251

  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的记录http://www.cndba.cn/Expect-le/article/251

  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.


http://www.cndba.cn/Expect-le/article/251

4.跳过前五条记录,返回后五条记录

http://www.cndba.cn/Expect-le/article/251
http://www.cndba.cn/Expect-le/article/251http://www.cndba.cn/Expect-le/article/251

  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

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Expect-乐

Expect-乐

关注

Without the continuous bitter cold, there can be no fragrant plum blossom

  • 336
    原创
  • 6
    翻译
  • 100
    转载
  • 41
    评论
  • 访问:1553522次
  • 积分:1957
  • 等级:核心会员
  • 排名:第4名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ