MS SQL查询时自动给数据排名:RANK(),DENSE_RANK()

    相信每人在开发应用过程中都遇到过这样的需求:针对所查询数据的某列进行排名。一般情况下我们有2种选择:

    1.将数据查询出来,在显示数据的时候给每条数据增加排名数字;

    2.使用SQL函数在查询时自动给数据排名。

    更多时候,我们推荐,在性能允许的情况下,让数据库承担它力所能及的逻辑处理,而让程序更专注于业务。这里我就把如何为使用SQL给数据排名。相信大家对ROW_NUMBER()函数并不陌生,在分页存储过程中应该没有少用,当然,它并不能满足我们的排名需求,但它的姊妹函数:RANK(),DENSE_RANK()函数却可以满足我们的需求。    

    RANK(),DENSE_RANK()的用法与ROW_NUMBER()相同,后面均接OVER():

    --按分数降序对成绩单进行排名

    SELECT RANK() OVER(ORDER BY Mark DESC) AS Rank, * FROM SchoolRecordCard WITH(NOLOCK)

    SELECT DENSE_RANK() OVER(ORDER BY Mark DESC) AS Rank, * FROM SchoolRecordCard WITH(NOLOCK)    

    如此,我们既在查询时使用排名函数自动对数据进行排名。但2者的排名规则却不相同:

    DENSE_RANK():返回结果集分区中行的排名,在排名中没有任何间断。行的排名等于所讨论行之前的所有排名数加一。

    RANK():返回结果集的分区内每行的排名。行的排名是相关行之前的排名数加一。

    也就是说,使用Rank()函数进行排名,假如排在第一,第二位的同学分数相同,则他们并列第一,他们下一位则是第三。而使用Dense_Rank()排名是不间断的,既第一第二位同学并列第一,第三位同学是第二。我们可以根据需求所提的排名规则来相应地选用排名函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值