rank() over,dense_rank() over,row_number() over函数的区别

版权声明:https://blog.csdn.net/lvtula https://blog.csdn.net/lvtula/article/details/86289763

rank() over的作用是查出指定条件后进行一个排序,但是有一个特点。使用这个函数,相同列值并列显示,如两个为4的排序,然后接下来就是排序为6,其中排名5跳过。

dense_rank() over的作用和rank() over一样,都是排序而且形同列的值并列显示,如排序为4的两个。但是和rank() over不同的是,接下来它还是会显示排序5的。这就是密集排序。

row_number() over和上面两个函数不同,它不会考虑并列问题,哪怕查询的列值相同,也不会考虑并列,直接排序下去。

上面的三个函数,还可以分组,以rank() over 为例:

select sal,row_number() over (partitition by deptno order by sal) as sal_rank from scott.emp;

其他两个同样,可以这样分组。

结论: 
row_number:不管排名是否有相同的,都按照顺序1,2,3…..n 
rank:排名相同的名次一样,同一排名有几个,后面排名就会跳过几次 
dense_rank:排名相同的名次一样,且后面名次不跳跃

参考:https://blog.csdn.net/huhu307/article/details/51177346

https://blog.csdn.net/yjgithub/article/details/76136737

猜你喜欢

转载自blog.csdn.net/lvtula/article/details/86289763