在ORACLE中实现SELECT TOP N的方法

oracle select top的方法 Oracle SQL语法不支持select top 100 * from table_a之类的top语法,当然可以使用rownum取出多少行来看,但是如果加上排序还使用这个rownum的话,大部分情况是,先取出rownum行记录,然后排序再显示,这和我们要求的排序后再取rownum行是不同的,不符合要求。而且更进一步说,假设我要查看每个分组的前N个记录呢?又如何实现? 立即下载
1.在ORACLE中实现SELECT TOP N
   由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。
 简单地说,实现方法如下所示:
  SELECT 列名1...列名n FROM
    (SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)
   WHERE ROWNUM <= N(抽出记录数)
  ORDER BY ROWNUM ASC
   下面举个例子简单说明一下。
 顾客表customer(id,name)有如下数据:
  ID NAME
   01 first
   02 Second
   03 third
   04 forth
   05 fifth
   06 sixth
   07 seventh
   08 eighth
   09 ninth
   10 tenth
   11 last
   则按NAME的字母顺抽出前三个顾客的SQL语句如下所示:
  SELECT * FROM
    (SELECT * FROM CUSTOMER ORDER BY NAME)
   WHERE ROWNUM <= 3
   ORDER BY ROWNUM ASC
   输出结果为:
  ID NAME
   08 eighth
   05 fifth
   01 first
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的时候,即为我们的标题讲的结果。实际上,2的做法在里面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
     结果为:
   ID NAME
    05 fifth
4.抽出按某种方式排序的记录集中的第M条记录开始的X条记录
   3里所讲得仅仅是抽取一条记录的情况,当我们需要抽取多条记录的时候,此时在2中的N的取值应该是在N >= (M + X - 1)这个范围内,当让最经济的取值就是取等好的时候了的时候了。当然最后的抽取条件也不是RECNO = N了,应该是RECNO BETWEEN M AND (M + X - 1)了,所以随之而来的SQL语句则为:
   SELECT 列名1...列名n FROM
    (
     SELECT ROWNUM RECNO, 列名1...列名nFROM
      (
      SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)
      WHERE ROWNUM <= N (N >= (M + X - 1))
    ORDER BY ROWNUM ASC
      )
     WHERE RECNO BETWEEN M AND (M + X - 1)
    同样以上面的数据为例,则抽取NAME的字母顺的第2条记录开始的3条记录的SQL语句为:
   SELECT ID, NAME FROM
     (
      SELECT ROWNUM RECNO, ID, NAME FROM
        (SELECT * FROM CUSTOMER ORDER BY NAME)
      WHERE ROWNUM <= (2 + 3 - 1)
      ORDER BY ROWNUM ASC
     )
     WHERE RECNO BETWEEN 2 AND (2 + 3 - 1)
     结果如下:
   ID NAME
    05 fifth
    01 first
    04 forth
    以此为基础,再扩展的话,做成存储过程,将开始记录数以及抽取记录数为参数,就可以轻松实现分页抽取数据。
 
如何在Oracle中实现SELECT TOP N的方法 本文通过举例的方式来教你如何在Oracle中实现SELECT TOP N的方法。 立即下载

相关推荐

国赛数学建模高教社杯历届优秀论文全集

包含了2004到2023年高教社的赛题及优秀论文。

BanDeng001的博客 3286

Oracle SELECT TOP

在ORACLE中实现SELECT TOP N的方法 1.在ORACLE中实现SELECT TOP N     由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELE

xiafuyuan的专栏 1545

使用电荷放大器处理压电加速度计输出

电阻器 R p模拟传感器的绝缘电阻,为产生的电荷创建泄漏路径。在此图中,顶部波形显示传感器产生的电荷,而底部波形显示电荷放大器的输出。这需要具有大输入阻抗的放大级,以防止产生的电荷通过与传感元件并联的放大器的输入阻抗泄漏。换句话说,电荷放大器补偿传感器产生的电荷 q p ,反馈电容器 C F中具有相反极性的等量电荷。因此,任何与传感器并联的绝缘电阻,如电缆的绝缘电阻或传感器的漏电电阻Rp,都不能流过电流。漂移是指电荷放大器输出在一段时间内发生的变化,而不是由被测物理参数的变化(我们讨论的加速度)引起的。

weixin_45260069的博客 3905

oracle怎么top,Oracle实现SELECT TOP N的步骤有哪些?

以下的文章主要介绍的是如何在Oracle实现SELECT TOP N的实际操作方法,我前两天在相关网站看见在Oracle实现SELECT TOP N的实际操作的相关资料,觉得挺好,就拿出来供大家分享。1.在Oracle实现SELECT TOP N由于Oracle不支持SELECT TOP语句,所以在Oracle中经常是用ORDER BY跟ROWNUM的组合来Oracle实现SELECT TOP N...

weixin_42303461的博客 2372

高通Camera HAL3调试实战:如何用camxoverridesettings.txt高效抓取日志与dump图像数据

本文深入探讨了高通Camera HAL3调试中camxoverridesettings.txt文件的高效应用,重点介绍了如何通过该文件精准控制日志输出级别与dump图像数据,帮助开发者快速定位移动影像系统中的问题。文章详细解析了日志分级配置、图像数据捕获技巧及典型问题排查流程,为高通Camera HAL3项目开发提供了实用技术点。

weixin_30315905的博客 861

GEE 案例:利用多源遥感数据计算RUSLE(Revised Universal Soil Loss Equation)土壤侵蚀

该数据集提供了全球范围内以250至500米的空间分辨率获取的多光谱图像数据,用于监测地表覆盖和变化。RUSLE模型的基本原理是通过考虑土壤侵蚀的主要驱动因素,来估计土壤侵蚀的速率。该数据集提供了全球范围内以10至60米的空间分辨率获取的多光谱图像数据,用于监测地表覆盖和变化。它对农业和土地资源管理者提供了一种评估和预测土壤侵蚀风险的工具,以制定适当的土壤保护措施和决策。2. soil(土壤)是来自OpenLandMap的土壤纹理分类数据,使用了USDA(美国农业部)土壤纹理分类系统。

此星光明博客 803

Oracle的常用函数

1、decode的用法: decode(条件,值1,返回值1,值2,返回值2,值n……,返回值n,缺省值) 例如: select decode(b.id,2,'齐天大圣',3,'哈哈',null) from test2 b ; 2、replace的用法: replace(‘abcd’,‘bc’,‘哈哈’) 例如: select replace(t.name,'齐天','hahh')||'哇' "替换后" from TEST2 t where id=1; 3、concat的用法: concat是拼接函数,

m0_53166211的博客 814

基于 Simulink 的三相四线制整流器在三相不平衡负载下的中点电位平衡控制实战教程

本文为三相四线制整流器在中点电位不平衡时的Simulink仿真教程。首先分析中点电位漂移的电荷不平衡机理,提出零序电压注入控制策略。详细演示建模步骤:搭建三相四线制主电路,构建中点平衡控制算法(含MATLAB函数代码),实现控制信号叠加与PWM生成。通过对比仿真验证控制效果,并给出零序电压限幅、中性线电感影响等工程建议。该方案能有效抑制三相不平衡负载下的中点电位波动,保证系统稳定运行。

xiaoheshang_123的博客 50

SQL基础之总结篇

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。

yeyihexizhu的博客 1631

基于STM32L4XX、HAL库的MMA8452QR1姿态传感器驱动程序设计

/ HAL库需要左移1位。#define MMA8452Q_I2C_ADDRESS 0x1D // SA0=1时的地址。* @param range: 量程(MMA8452Q_RANGE_2G/4G/8G)* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。

zhusl6688的博客 770

Qt EGLFS 图形后端详解

EGLFS (EGL Full Screen) 是Qt框架在嵌入式Linux系统中的高性能图形显示后端,它提供了直接基于EGL和OpenGL ES的硬件加速渲染解决方案。

浩瀚之水的专栏 511

在ORACLE中实现SELECT TOP N

Select Top在不同数据库中的使用方法:

面朝大海 春暖花开 1026

PCL 基于强度的双边滤波【2026最新版】

基于强度信息的双边滤波代码实现、滤波前后点云未出现变化的原因以及获取带有强度pcd点云的方法。本文由优快云点云侠原创,博客长期更新,本文最近一次更新时间为:2026年5月24日。

点云侠的博客 29万+

select top 1 oracle,在ORACLE中SELECT TOP N的实现方法

1.在Oracle中实现SELECT TOP N由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。简单地说,实现方法如下所示:?下面举个例子简单说明一下。顾客表customer(id,name)有如下数据:ID NAME01 first02 Second03 third04 forth05 fift...

weixin_39992072的博客 901

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

在Oracle中实现SELECT TOP N的方法

  本文通过举例的方式来教你如何在Oracle中实现SELECT TOP N的方法。 1.在Oracle中实现SELECT TOP N :  由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。  简单地说,实现方法如下所示:   SELECT 列名

独 coding 乐不如众 coding 乐 676

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

(转)教你在Oracle中实现SELECT TOP N的方法

 本文通过举例的方式来教你如何在Oracle中实现SELECT TOP N的方法。  1.在Oracle中实现SELECT TOP N :  由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。  简单地说,实现方法如下所示:双击代码全选12345SELECT 列名1...列名n ...

agnsm00804的专栏 98

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

教你在Oracle中实现SELECT TOP N的方法 【转】

<br />本文通过举例的方式来教你如何在Oracle中实现SELECT TOP N的方法。 <br />1.在Oracle中实现SELECT TOP N : <br /> <br />由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。 <br /> <br />简单地说,实现方法如下所示: <br /> SELECT 列名1...列名n FROM <br /><br /> (SELECT 列名1

qingmumu1985的专栏 690

教你在Oracle中实现SELECT TOP N的方法

 本文通过举例的方式来教你如何在Oracle中实现SELECT TOP N的方法。 1.在Oracle中实现SELECT TOP N :  由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。  简单地说,实现方法如下所示:   SELECT 列名1

ddxkjddx的专栏 785

top+n+mysql+oracle_在ORACLE中SELECT TOP N的实现方法

1.在Oracle中实现SELECT TOP N由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。简单地说,实现方法如下所示: SELECT 列名1...列名n FROM(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)WHERE ROWNUM <= N...

weixin_34640051的博客 263
上一篇: 在公告栏中添加flash
下一篇: oracle汉字排序
Gerry-Zhang
博客等级 码龄20年 677粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值