mysql中的排名函数rank()、dense_rank()、row_number()

排名函数rank()、dense_rank()、row_number()的比较

1、问题描述

在写LeetCode178. 分数排名时,它的要求是输出“无间隔”的分数排名,于是本文主要记录rank()、row_number()、dense_rank()三个排名函数的差异。

1.1 表样式示例:score表
IdScore
编号分数

在这里插入图片描述

2、rank()
2.1 作用

按照某字段的排序结果添加排名,但它是跳跃的、间断的排名,例如两个并列第一名后,下一个是第三名。

2.2 示例代码
SELECT Score,rank() over(ORDER BY Score desc) as 'Rank'
FROM score
2.3 查询结果

在这里插入图片描述

3、 row_number()
3.1 作用

它是将某字段按照顺序依次添加行号。

3.2 示例代码
SELECT Score,row_number() over(ORDER BY Score desc) as 'Rank'
FROM score
3.3 查询结果

在这里插入图片描述

4、dense_rank()
4.1 作用

dense 英语中指“稠密的、密集的”。dense_rank()是的排序数字是连续的、不间断。当有相同的分数时,它们的排名结果是并列的,例如,1,2,2,3。

4.2 示例代码
SELECT Score,dense_rank() over(ORDER BY Score desc) as 'Rank'
FROM score
4.3 查询结果

在这里插入图片描述

5、总结

函数名关键词作用主要适用场景
rank()间断不连续按顺序输出排名结果,每当出现一个并列结果,则下一个排名数字向后递增一位。在并列结果中,每个并列成绩都要占用一个名额的场景
dense_rank()连续按数学输出排名的名次。当出现并列结果时,下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。当排序结果存在并列成绩时,需要下一个名次于上一个名次是连续整数的情况。
row_number()行号按顺序输出表的行号需要输出表的行号时
  • 24
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
MySQL,可以使用RANK()、DENSE_RANK()和ROW_NUMBER()函数来查询每个用户订单金额最高的订单信息。这些函数的主要区别如下: - RANK()函数:根据指定的排序顺序对于每个用户的订单金额进行排名,如果存在相同的订单金额,会跳过相同的排名并留下空位。例如,如果有两个订单金额最高的订单,它们的排名就会是1和2,而不是两个都是1。 - DENSE_RANK()函数:与RANK()函数类似,它也根据指定的排序顺序对于每个用户的订单金额进行排名。但是,与RANK()函数不同的是,它不会跳过相同的排名,而是会按照相同的排名依次递增。例如,如果有两个订单金额最高的订单,它们的排名就会是1和1,而不是1和2。 - ROW_NUMBER()函数:根据指定的排序顺序为每个用户的订单金额分配唯一的行号。它不会考虑相同的订单金额,而是简单地为每个订单按照顺序分配行号。例如,如果有两个订单金额最高的订单,它们的行号就会是1和2。 你可以使用以下SQL查询来获取每个用户订单金额最高的订单信息: <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [[Mysql] RANK()函数 | ROW_NUMBER()函数 | DENSE_RANK()函数](https://blog.csdn.net/Hudas/article/details/124584662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值