Oracle 聚合函数 排名函数 rank dense_rank

数据库中经常会有会某列进行排名,分组排名,求名次的需求,以前用的比较笨的方法 先order by 某列,然后用rownum
今天学到两个函数可以实现这样的功能 rank,dense_rank
具体语法如下:RANK ( ) OVER ( [query_partition_clause] order_by_clause )。 

dense_rank
与rank()用法相当,但是有一个区别:dence_rank在处理相同的等级时,等级的数值不会跳过。rank则跳过。

例如:表

    A B C
a          liu          wang
a          jin          shu
a          cai          kai
b          yang      du
b          lin          ying
b          yao        cai
b          yang      99

例如:当rank时为:

select m.a,m.b,m.c,rank() over(partition by a order by b) liu from test3 m

A          B             C          LIU
a          cai          kai          1
a          jin           shu        2
a          liu           wang     3
b          lin           ying        1
b          yang      du           2
b          yang      99           2
b          yao        cai           4

而如果用dense_rank时为:
select m.a,m.b,m.c,dense_rank() over(partition by a order by b) liu from test3 m

A          B             C          LIU
a          cai          kai          1
a          jin           shu        2
a          liu           wang     3
b          lin           ying        1
b          yang      du           2
b          yang      99           2
b          yao        cai           3

posted on 2009-09-07 13:54  lwl0606  阅读(777)  评论(0编辑  收藏  举报

导航

我要啦免费统计