rownum 与order by 的执行顺序及按rownum 排序

1549年前 (2017-06-22)oracle数据库7296

  如果select语句(非嵌套查询形式的)有order by子句,则order by子句一般都是最后一步执行的。但是如果order by子句里的字段被设置了主键约束或是被设置索引了,那么order by子句执行之后,oracle系统还会重新对结果集的rownum值进行编号。


AX57P~4741DA]_)}MPP2N5X.png

上图看出,P_WEIGHT是降序并有序的。而rownum是无序的。

下图,加了rownum<=0后,按P_WEIGHT 降序,P_WEIGHT的最高值也没了


图片.png


解决方案:1,将P_WEIGHT设为主键,显然此方法不可能,如果是按主键id排序,就没有此问题了

2.嵌套查询:

select ROWNUM,P_WEIGHT from
(select ROWNUM,D.P_WEIGHT from T_SYS_POI D where D.P_STYLE = '002'  ORDER BY D.P_WEIGHT desc)
where   ROWNUM<=10

  而嵌套查询方法相比之下拥有较高的效率,主要体现在WHERE ROWNUM <= 10这句上

图片.png

本文原创,转载必追究版权。

分享给朋友:

相关文章

oracle函数调用webservices 步骤:

oracle函数调用webservices 步骤:

 1,  去oracle官网上下载dbws-callout-utility-10131.zip 下载地址:(1)  http://www.oracle-base...

java将金额转化为大写金额

 private static String[] num = {"零","壹","贰","叁","肆...

如何彻底卸载删除oracle数据库

 windows下如何彻底删除Oracle 软件环境: 1、Windows 2000+ORACLE 8.1.7 ,oracle 10g2、ORACLE安装路径为:C:\ORACLE实现方...

jfinal 使用C3p0同时配置mySql与Oracle数据库

    /**     * 配置插件     */    public void...

Java判断是数字还是字符串

方法一:利用正则表达式public class Testone {public static void main(String[] ...

jfinal 定时任务

1、去quartz官网下载 定时任务jar包(http://www.quartz-scheduler.org/)quartz-*.*.*.jar2、创建定时任务:public class SetAre...

评论列表

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。