ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【函数】Oracle中聚合函数rank()使用方法

【函数】Oracle中聚合函数rank()使用方法

原创 Linux操作系统 作者:散叶涔 时间:2012-04-25 19:18:21 0 删除 编辑

Oracle对于rank和dense_rank已经支持合计功能,不过这次我仅仅使用了其分析功能。具体语法如下:RANK ( ) OVER ( [query_partition_clause] order_by_clause )。

下面给出一些来自网上的示例:

TABLE:S (subject,mark)

数学,80
语文,70
数学,90
数学,60
数学,100
语文,88
语文,65
语文,77

现在我想要的结果是:每门科目的前3名的分数

数学,100
数学,90
数学,80
语文,88
语文,77
语文,70
那么语句就这么写:

select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T
where T.rk<=3;

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26892340/viewspace-722237/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-04-17

  • 博文量
    44
  • 访问量
    117378