实践rank,dense_rank,row_number区别

原创 2016年08月30日 11:02:59

1、新建表
create table score(name string,subject string,score string);
2、插入数据
insert into score values('1','En','80'),('2','En','80'),('3','En','90'),('4','En','60'),('5','En','70'),('6','En','81'),('8','En','50')
insert into score values('1','Math','80'),('2','Math','80'),('3','Math','90'),('4','Math','60'),('5','Math','70'),('6','Math','81'),('8','Math','50')
3、查询
select * from score


score.name       score.subject       score.score
0       1       En       80
1       2       En       80
2       3       En       90
3       4       En       60
4       5       En       70
5       6       En       81
6       8       En       50
7       1       Math       80
8       2       Math       80
9       3       Math       90
10       4       Math       60
11       5       Math       70
12       6       Math       81
13       8       Math       50
4、row_number()
select subject,score,row_number() over(partition by subject order by score desc) rank
from score


       subject       score       rank
7       En       90       1
8       En       81       2
9       En       80       3
10       En       80       4
11       En       70       5
12       En       60       6
13       En       50       7
0       Math       90       1
1       Math       81       2
2       Math       80       3
3       Math       80       4
4       Math       70       5
5       Math       60       6
6       Math       50       7
5、dense_rank()
select subject,score,dense_rank() over(partition by subject order by score desc) rank
from score
        subject       score       rank
0       Math       90       1
1       Math       81       2
2       Math       80       3   <----允许有并列名次出现
3       Math       80       3   <----并列名次之后继续按照顺序排名
4       Math       70       4
5       Math       60       5
6       Math       50       6
7       En       90       1
8       En       81       2
9       En       80       3
10       En       80       3
11       En       70       4
12       En       60       5
13       En       50       6


6、rank()


select subject,score,rank() over(partition by subject order by score desc) rank
from score


        subject       score       rank
0       Math       90       1
1       Math       81       2
2       Math       80       3 <----并列排名之后继续递增排序
3       Math       80       3
4       Math       70       5
5       Math       60       6
6       Math       50       7
7       En       90       1
8       En       81       2
9       En       80       3
10       En       80       3
11       En       70       5
12       En       60       6
13       En       50       7
7、总结
语法(用法):
     rank() over([partition by col1] order by col2) 
     dense_rank() over([partition by col1] order by col2) 
     row_number() over([partition by col1] order by col2) 
     其中[partition by col1]可省略。


区别
    三个分析函数都是按照col1分组内从1开始排序
    
    row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页
    dense_rank() 是连续排序,两个第二名仍然跟着第三名
    rank()       是跳跃拍学,两个第二名下来就是第四名
8、删除表
drop table score

相关文章推荐

RANK、DENSE_RANK以及ROW_NUMBER区别

场景 数据库查询中,很多时候都会遇到对数据进行分组,然后组内排序加序号的需求。 应用 对于组内排序一般有三个函数可供使用,它们是RANK()、DENSE_RANK()以及ROW_NUMBER()。它们...

rank,dense_rank,row_number使用和区别

rank,dense_rank,row_number区别 一:语法(用法):      rank() over([partition by col1] order by col2)      ...

数据库技术之rank、dense_rank、ntile、row_number函数的区别

这四个(RANK、DENSE_RANK、NTILE、ROW_NUMBER)函数,都是用来对数据库中的数据进行排名的,在他们的功能各有千秋。       下面介绍一下这四个函数的功能和用法: 首先创建...

数据库SQL中对查询结果排序排列序号编号,Oracle分析函数 rank,dense_rank,row_number使用和区别

Oracle从8i开始就提供了3个分析函数:rank,dense_rank,row_number (1)Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,    ...

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

转载:http://blog.csdn.net/qq_20641565/article/details/52841345?locationNum=5&fps=1 row_number...

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

三个分组函数都是按照col1分组内从1开始排序,区别在于: row_number() 是没有重复值的排序(即使两天记录相等也是不重复的) dense_rank() 是连续排序,两个第二名仍然跟着第三名...

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

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

Oracle中rank() over, dense_rank(), row_number() 的区别

Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名、分数、课程编号,现在我需要按照课程对学生...
  • TFFITS
  • TFFITS
  • 2017年07月25日 18:52
  • 242

ROW_NUMBER、RANK、DENSE_RANK 和 NTILE

  • 2012年03月12日 10:52
  • 20KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实践rank,dense_rank,row_number区别
举报原因:
原因补充:

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