oracle中的rank() over,dense_rank(),row_number()的区别
oracle中的rank() over,dense_rank(),row_number()的各自使用方法以及区别
语法
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() 是跳跃排序,两个第二名下来就是第四名 **
案例
数据准备:
1 | create table t( |
row_number()
1 | select name,score,row_number() over(partition by name order by score) tt from t; |
rank()
1 | select name,score,rank() over(partition by name order by score) tt from t; |
dense_rank()
1 | select name,score,dense_rank() over(partition by name order by score) tt from t; |
oracle中的rank() over,dense_rank(),row_number()的区别