rank()与dense_rank()的分析

翻译 2013年12月03日 15:49:43

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分析函数

语法:DENSE_RANK() OVER([PARTITION BY expr1[,expr2,..,exprn]] ORDER BY expr1[,expr2,..,exprn])

 


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行。

相关文章推荐

Oracle分析函数KEEP、DENSE_RANK的使用

最近在工作中,碰到一个问题,后来

SQL 分析函数之KEEP (DENSE_RANK FIRST/LAST)

KEEP (DENSE_RANK FIRST/LAST)

mysql上排名sql的写法,类似oracle的rank和dense

转:http://mxohy.blog.sohu.com/172181390.html?qq-pf-to=pcqq.c2c 这几天开发提交了几个排名的sql,oracle环境下这类问题就很好解决了,...

oracle分析函数系列之rank,dense_rank,row_number:实现排名策略

Rank,Dense_rank,Row_number函数为每条记录产生一个从1开始至N的自然数,N的值可能小于等于记录的总数。这3个函数的唯一区别在于当碰到相同数据时的排名策略。 ①ROW_NU...

Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK

本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途。 Hive版本为 apache-hive-0.13.1 注意: 序列函数不支持...

Oracle:分析函数2(Rank, Dense_rank, row_number)

目录 ===============================================1.使用rownum为记录排名2.使用分析函数来为记录排名3.使用分析函数为记录进行分组排名 一...

Oracle分析函数总结(2) - 排序 - rank,dense_rank,row_number,first,first_value,last,last_value,lag,lead

分析函数的基本概念和语法 -> http://blog.csdn.net/fw0124/article/details/7842039 1) rank(),dense_rank(),row_...
  • fw0124
  • fw0124
  • 2012-08-08 16:44
  • 5119

Oracle-分析函数之排序值rank()和dense_rank()

概述Oracle常见函数大全Oracle-分析函数之连续求和sum(…) over(…)Oracle-分析函数之排序值rank()和dense_rank()Oracle-分析函数之排序后顺序号row_...

Oracle分析函数之Rank()和DENSE_RANK()详解

Rank()使用说明: a. 函数简介:     返回结果集分区内指定字段的值的排名,指定字段的值的排名是相关行之前的排名加一(排名不一定连续,在排名值上留下空隙)。 b. 语法: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)