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)

 

  

posted @ 2013-09-09 18:50  Blue Blue  阅读(763)  评论(0编辑  收藏  举报