SQL窗口函数排序ROW_NUMBER()、RANK()、DENSE_RANK()区别

SQL中排序函数区别

ROW_NUMBER():排序依据相同时,给出不同前后顺序。
RANK():排序依据相同时,给出相同顺序。
DENSE_RANK():排序依据相同时,给出相同顺序,且稠密排序(序号是连着的,不是跳跃的)。

举例说明:把下列数据按照type的不同进行排序
SQL窗口函数排序ROW_NUMBER()、RANK()、DENSE_RANK()区别_第1张图片

1、使用ROW_NUMBER()

select *,ROW_NUMBER() over (partition by type order by buy_time) as ranking from paydetail_test_copy1 

使用row_number(),即使A类型的7900和7903的购买时间一样,但会给出不同的排序序号。
SQL窗口函数排序ROW_NUMBER()、RANK()、DENSE_RANK()区别_第2张图片

2、使用RANK()

select *,RANK() over (partition by type order by buy_time) as ranking from paydetail_test_copy1 

使用rank(),A类型的7900和7903的购买时间一样,就会给出相同的排序序号。

SQL窗口函数排序ROW_NUMBER()、RANK()、DENSE_RANK()区别_第3张图片

3、使用DENSE_RANK()

select *,DENSE_RANK() over (partition by type order by buy_time) as ranking from paydetail_test_copy1 

dense_rank()又被叫做稠密排序。
使用dense_rank(),A类型的7900和7903的购买时间一样,会给出相同的排序序号。与rank()不同的是,这两个相同序号(即 2)的下一个序号是3,因此“稠密”。

SQL窗口函数排序ROW_NUMBER()、RANK()、DENSE_RANK()区别_第4张图片

你可能感兴趣的:(SQL,sql,排序算法,数据库)