Rownum 解决排名问题,分页问题
Rownum用法2013-09-09
一、rownum
伪列。它和数据不是一一对应的。但是又可以通过它进行排序的。或者获取某个wornum对应的数据。
在同一个单独的查询语句中是固定的,如子查询是一个查询,父查询又是一个查询。
如果只是一个单独的查询,非嵌套查询,rownum是根据插入的顺序编号的。从1开始。
如果根据rownum过滤数据,rownum必须从1开始,并且中间不能有间隔,间隔后的数据不能查询出。
二、排名。
如工资排名,产品点击量的排名,或者想拿到某个名次的产品。
实例:某商品的销量.获取销量排名第四的产品信息
创建数据表:
1 drop table if exists product; 2 create table product( 3 productId varchar2(20), 4 productName varchar2(20), 5 saleNum number(20) 6 ); 7 insert into product values("001","商品1",200); 8 insert into product values("002","商品2",20); 9 insert into product values("003","商品3",50); 10 insert into product values("004","商品4",200); 11 insert into product values("005","商品5",70); 12 insert into product values("006","商品6",80);
操作:
1 select * 2 from (select rownum rn, a.* 3 from (select * from product a order by a.saleNum desc) a 4 where rownum <= 4) k where k.rn=4;
三、分页
1 select * 2 from (select rownum rn, a.* from (select * from song a) a where rownum <=2) k 3 where k.rn >=1
按照每页2条数据显示。
设置两个变量pageSize和pageNum.
pageSize=3 第一页: 第一条 最后一条 pageNum=1 1 3 第二页: pageNum=2 4 6 第三页: pageNum=3 7 9
每页的第一条数据为:pageSize(pageNum-1)+1
最后一条数据为:pageSize*pageNum
最终要求的sql语句为:
1 select * 2 from (select rownum rn, a.* from (select * from song a) a where rownum <=(pageSize*pageNum)) k 3 where k.rn >=(pageSize(pageNum-1)+1)
作者:Blue
出处:http://www.cnblogs.com/edwardlu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。