前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >区分函数 ROW_NUMBER(), RANK(), and DENSE_RANK()

区分函数 ROW_NUMBER(), RANK(), and DENSE_RANK()

作者头像
万能数据的小草
发布2020-02-10 18:08:15
发布2020-02-10 18:08:15
69600
代码可运行
举报
文章被收录于专栏:万能的小草万能的小草
运行总次数:0
代码可运行

今天给大家推送第一篇SQL文章《辨析函数 ROW_NUMBER(), RANK(), and DENSE_RANK() 》,接下来所讨论的全部内容都是基于ORACLE数据库

其实这三个函数的区别很容易记住,首先,创建一个reference table 叫做refer_table.

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE refer_table ( ref_var  varchar(1));
insert into refer_table(ref_var) values('a');insert into refer_table(ref_var) values('a');insert into refer_table(ref_var) values('a');insert into refer_table(ref_var) values('b');insert into refer_table(ref_var) values('c');insert into refer_table(ref_var) values('c');insert into refer_table(ref_var) values('d');insert into refer_table(ref_var) values('e');
commit;

接下来,我们对这个table同时运行上述三个函数,运行下述代码

代码语言:javascript
代码运行次数:0
运行
复制
SELECT
 ref_var,
 ROW_NUMBER() OVER(ORDER BY ref_var) as row_number,
 RANK()       OVER(ORDER BY ref_var) as rank,
 DENSE_RANK() OVER(ORDER BY ref_var) as dense_rank
FROM refer_tableORDER BY 1, 2

得到下面的结果

代码语言:javascript
代码运行次数:0
运行
复制
ref_var row_number rank dense_ranka	   1	     1	   1
a	   2	     1	   1
a	   3	     1	   1
b	   4	     4	   2
c	   5	     5	   3
c	   6	     5	   3
d	   7	     7	   4
e	   8	     8	   5

由上述结果可对ROW_NUMBER(), RANK(), and DENSE_RANK() 区别做如下总结:

  1. row_number ()在进行排序的时候,针对相同的元素,会赋予不同的序号值,且序号值是唯一不重复并且是连续的。
  2. rank()进行排序的时候,针对相同的元素(a,a,a),会赋予相同的序号值 1, 接下来对元素b进行排序的时候,赋予的的序号4,也就是说序号值是跳跃的。

3. dense_rank()排序的时候,针对相同元素(a,a,a),会赋予相同的序号值1, 紧接着对元素b赋值是2,也就是序号值是连续可重复的

在今后的日子,文章会尽量保持一周一更的频率,希望大家喜欢!如有任何疑问,欢迎后台回复,我看到的话都会回复的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小草学Python和SQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档