【SQL篇】SQL中排序函数row_number、dense_rank、rank的区别

在SQL中,ROW_NUMBER()DENSE_RANK()RANK()都是窗口函数,用于对数据进行排序和排名,但它们之间存在一些关键区别。以下是这三个函数的详细比较:

一、ROW_NUMBER()

  • 功能:为结果集中的每一行分配一个唯一的连续编号。

  • 特点

    • 编号从1开始,并且每行一个唯一的编号,不会重复。
    • 如果有两行或多行的排序值相同,它们仍然会被分配不同的编号。

    • 常用于分页查询和排名计算。
    • 姓名成绩排名
      小明951
      小王942
      小红933
      小杰934

二、DENSE_RANK()

  • 功能:对数据进行排序并处理相同值的排名。

  • 特点

    • 如果两行或多行的排序值相同,它们会被分配相同的排名。
    • ROW_NUMBER()不同,DENSE_RANK()在分配排名时不会跳过任何数字。即如果有两个排名相同的行,下一个行的排名将是紧接着的下一个数字,而不是跳过。
    • 例如,如果两行都是第一名,则下一行的排名将是第二名,而不是第三名。
    • 姓名成绩排名
      小明951
      小王942
      小红933
      小杰933
      小龙904

三、RANK()

  • 功能:对数据进行排序并处理相同值的排名。

  • 特点

    • 如果两行或多行的排序值相同,它们会被分配相同的排名。
    • DENSE_RANK()不同,RANK()在分配排名时会跳过数字。即如果有两个排名相同的行,下一个行的排名将是跳过相同排名后的下一个数字。
    • 例如,如果两行都是第一名,则下一行的排名将是第三名,而不是第二名(因为第二名被跳过了)。
    • 姓名成绩排名
      小明951
      小王942
      小红933
      小杰933
      小龙905
      小刚886

四、总结

  • 唯一编号ROW_NUMBER()为每行分配唯一的连续编号,不会重复。
  • 连续排名DENSE_RANK()在相同排序值的情况下分配相同的排名,并且排名是连续的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值