科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在Oracle中实现SELECT TOP N的方法(2)

在Oracle中实现SELECT TOP N的方法(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文通过举例的方式来教你如何在Oracle中实现SELECT TOP N的方法。

作者:feihu1984 来源:赛迪网 2007年9月3日

关键字: SELECT TOP N 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件

2.在TOP N纪录中抽出第M(M <= N)条记录:

在得到了TOP N的数据之后,为了抽出这N条记录中的第M条记录,我们可以考虑从ROWNUM着手。我们知道,ROWNUM是记录表中数据编号的一个隐藏子段,所以可以在得到TOP N条记录的时候同时抽出记录的ROWNUM,然后再从这N条记录中抽取记录编号为M的记录,即是我们希望得到的结果。

从上面的分析可以很容易得到下面的SQL语句:

SELECT 列名1...列名n FROM 

 ( 

 SELECT ROWNUM RECNO, 列名1...列名nFROM 

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n) 

 WHERE ROWNUM <= N(抽出记录数) 

ORDER BY ROWNUM ASC 

 ) 

WHERE RECNO = M(M <= N)

同样以上表的数据为基础,那么得到以NAME的字母顺排序的第二个顾客的信息的SQL语句应该这样写:

SELECT ID, NAME FROM 

 ( 

SELECT ROWNUM RECNO, ID, NAME FROM 

(SELECT * FROM CUSTOMER ORDER BY NAME) 

 WHERE ROWNUM <= 3 

 ORDER BY ROWNUM ASC ) 

WHERE RECNO = 2

结果则为:

ID NAME

05 fifth

3.抽出按某种方式排序的记录集中的第N条记录:

在2的说明中,当M = N的时候,即为我们的标题第三点所讲的结果。实际上,第二点的做法在里面N>M的部分的数据是基本上不会用到的,我们仅仅是为了说明方便而采用。

如上所述,则SQL语句应为:

SELECT 列名1...列名n FROM 

 ( 

SELECT ROWNUM RECNO, 列名1...列名nFROM 

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n) 

 WHERE ROWNUM <= N(抽出记录数) 

ORDER BY ROWNUM ASC 

 ) 

 WHERE RECNO = N 

 那么,2中的例子的SQL语句则为: 

SELECT ID, NAME FROM 

( 

SELECT ROWNUM RECNO, ID, NAME FROM 

 (SELECT * FROM CUSTOMER ORDER BY NAME) 

WHERE ROWNUM <= 2 

ORDER BY ROWNUM ASC 

) 

WHERE RECNO = 2
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章