# rank()与dense_rank()的分析

1.rank()分析函数

RANK() OVER([PARTITION BY expr1[,expr2,..,exprn]] ORDER BY expr1[,expr2,..,exprn])

功能:                                                                                                                                            先将记录按PARTITION分组,组内再以ORDER BY排序,算出当前记录在组内所处的级别(名次). PRATITION条件省略时,表明不分组,或将全录记录作为一组

 SQL> select * from test; NAME       SUBJECT         SCORE ---------- ---------- ---------- aa         chinese            90 aa         art                     88 aa         english            80 bb         chinese            80 bb         art                     92 bb         english            96 cc         chinese            73 cc         art                      78 cc         english            60 已选择9行。

 SQL> break on name skip 1; SQL> select * from ( select name ,subject,score ,rank() over ( partition by name order by score desc)  score_rank  from  test)  where score_rank<=3; NAME       SUBJECT         SCORE SCORE_RANK ---------- ---------- ---------- ---------- aa         chinese            90          1                  art                88          2            english            80          3 bb         english            96          1                  art                92          2            chinese            80          3 cc            art                78          1            chinese            73          2            english            60          3 已选择9行。

 SQL> select * from (select name ,subject,score ,rank() over ( partition by subject order by score desc) score_rank from test) where score_rank<=3; NAME       SUBJECT         SCORE SCORE_RANK ---------- ---------- ---------- ---------- bb         art                92          1 aa                            88          2 cc                            78          3 aa         chinese     90          1 bb                            80          2 cc                            73          3 bb         english     96          1 aa                            80          2 cc                            60          3 已选择9行。

2.dense_rank函数

DENSE_RANK分析函数

 SQL> insert into test values('dd','chinese',80); 已创建 1 行。 SQL> insert into test values('dd','art',78); 已创建 1 行。 SQL> insert into test values('dd','english',96); 已创建 1 行。 SQL> select * from (select name ,subject,score,dense_rank() over ( partition by subject order by score desc) score_rank from test) where score_rank<=3; NAME       SUBJECT         SCORE SCORE_RANK ---------- ---------- ---------- ---------- dd         art                96          1 bb                            92          2 aa                            88          3 aa         chinese            90          1 bb                            80          2 cc                            73          3 bb         english            96          1 aa                            80          2 cc                            60          3 已选择9行。

 SQL>  select * from (select name ,subject,score ,dense_rank() over ( partition by name order by score desc) score_rank from test) where score_rank<=3; NAME       SUBJECT         SCORE SCORE_RANK ---------- ---------- ---------- ---------- aa         chinese            90          1 aa         art                     88          2 aa         english            80          3 bb                                 96          1 bb         art                    92          2 bb         chinese            80          3 cc         art                     78          1 cc         chinese            73          2 cc         english            60          3 dd         art                   96          1 dd                               80          2 dd                               78          3 已选择12行。

 SQL> select * from (select name ,subject,score,rank() over ( partition by name order by score desc) score_rank from test) where score_rank<=3; NAME       SUBJECT         SCORE SCORE_RANK ---------- ---------- ---------- ---------- aa         chinese            90          1 aa         art                     88          2 aa         english            80          3 bb                                  96          1 bb         art                      92          2 bb         chinese            80          3 cc         art                      78          1 cc         chinese            73          2 cc         english            60          3 dd         art                96          1 dd                            80          2 dd                            78          3 已选择12行。 SQL> select * from (select name ,subject,score,rank() over ( partition by subject order by score desc) score_rank from test) where score_rank<=3; NAME       SUBJECT         SCORE SCORE_RANK ---------- ---------- ---------- ---------- dd         art                96          1 bb                            92          2 aa                            88          3 aa         chinese      90          1 bb                            80          2 cc                            73          3 bb         english       96          1 aa                            80          2 cc                            60          3 已选择9行。
• 本文已收录于以下专栏：

## RANK、DENSE_RANK以及ROW_NUMBER区别

• hustzw07
• 2016年04月20日 16:54
• 1226

## Oracle rank和dense_rank排名函数

1.rank函数 rank计算一组值的排名，返回数字类型。排名可能是不连续。如果有5人，其中有2个人排名第一,则rank返回的排名结果为：1 1 3 4 5。 作为一个聚合函数，返回虚拟行在样...
• chiclewu
• 2013年12月10日 23:49
• 6519

## Hive分析窗口函数之NTILE，ROW_NUMBER，RANK和DENSE_RANK

• jiangshouzhuang
• 2016年04月04日 16:34
• 1943

## MySQL 下 ROW_NUMBER / DENSE_RANK / RANK 的实现

• Bryan__
• 2016年05月01日 17:07
• 2749

## SQL中ROW_NUMBER()/RANK() /DENSE_RANK() OVER函数的基本用法

• biaobiao1217
• 2014年11月13日 13:20
• 2658

## oracle中rank() over, dense_rank(), row_number() 的区别

• zdp072
• 2015年04月16日 15:01
• 1351

## 一个SQL语句分清楚RANK(),DENSE_RANK(),ROW_NUMBER()三个排序的不同

• S630730701
• 2016年07月14日 00:21
• 6125

## hive的row_number()、rank()和dense_rank()的区别以及具体使用

row_number()、rank()和dense_rank()这三个是hive内置的分析函数，下面我们来看看他们的区别和具体的使用案例。 首先创建一个文件test： A,1 B,3 C,2 D,3 ...
• qq_20641565
• 2016年10月17日 20:05
• 2783

## postgresql rank() over, dense_rank(), row_number() 的区别

• u011944141
• 2017年12月29日 02:54
• 198

## oracle中聚合函数RANK和dense_rank的使用

聚合函数RANK 和 dense_rank 主要的功能是计算一组数值中的排序值。在9i版本之前，只有分析功能（analyt...
• precipitant
• 2005年08月03日 15:21
• 1819

举报原因： 您举报文章：rank()与dense_rank()的分析 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)