区分函数 ROW_NUMBER(), RANK(), and DENSE_RANK()
- 2020 年 2 月 10 日
- 筆記
今天给大家推送第一篇SQL文章《辨析函数 ROW_NUMBER(), RANK(), and DENSE_RANK() 》,接下来所讨论的全部内容都是基于ORACLE数据库
其实这三个函数的区别很容易记住,首先,创建一个reference table 叫做refer_table.
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同时运行上述三个函数,运行下述代码
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
得到下面的结果
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() 区别做如下总结:
- row_number ()在进行排序的时候,针对相同的元素,会赋予不同的序号值,且序号值是唯一不重复并且是连续的。
- rank()进行排序的时候,针对相同的元素(a,a,a),会赋予相同的序号值 1, 接下来对元素b进行排序的时候,赋予的的序号4,也就是说序号值是跳跃的。
3. dense_rank()排序的时候,针对相同元素(a,a,a),会赋予相同的序号值1, 紧接着对元素b赋值是2,也就是序号值是连续可重复的。
在今后的日子,文章会尽量保持一周一更的频率,希望大家喜欢!如有任何疑问,欢迎后台回复,我看到的话都会回复的。