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

SQL中排序函数区别

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

举例说明:把下列数据按照type的不同进行排序
在这里插入图片描述

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的购买时间一样,但会给出不同的排序序号。
在这里插入图片描述

2、使用RANK()

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

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

在这里插入图片描述

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,因此“稠密”。

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值