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

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

  如果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 数据库cmd命令备份

 //导出exp wsbspt/wsbspt@192.168.1.101/wsbs file=D:/wsbspt.dmp log=D:/wsbspt.txt//导入imp &nbs...

plsql 中number类型字段 取消科学计数法显示

 PL/SQL DEVELOPER中禁用科学计数法:Tools - Prefrence - SQL Window - 选择:"Number fields to_char&quo...

竟然可以这样打扮!女人呆了!男人痴了!

来个轻松点的哇,惊呆了,肯定贵不了,立刻去瞅瞅...

mysql 建存储过程 实例

drop PROCEDURE if EXISTS sp_lasqCREATE PROCEDURE sp_lasq()    COMMENT '超过5天自动立案&#...

共享单车已经过时了!!!共享汽车要来了!比私家车和打车都便宜!

共享单车已经过时了!!!共享汽车要来了!比私家车和打车都便宜!

继共享单车后共享汽车也要来济南啦!无车一族!刚拿到驾照想练手的新手!以及想换个方式开车兜风的你们!还有讨厌打车又讨厌停车的你们!福音啊!10日,济南市人大代表、济南市停车集团董事长兼总经理白冰说济南市...

UUID 生成方法

import java.util.UUID;/**     * UUID 生成方法     * @return uuid &nbs...

评论列表

发表评论

访客

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