MySQL的排名函数 RANK() OVER、DENSE_RANK() OVER、ROW_NUMBER() OVER 用法介绍

本篇介绍的三个函数均MySQL 8.x 以上版本,8.x以下版本会报语法错误,属于正常现象。

MySQL 8.x 实际上就是 MySQL 5.8x,大概是为了通过更大版本型号数字,证明自己比友商先进吧。

你可以通过 mysql --version (cmd命令)或者 select version() (sql语句)查看MySQL版本型号。


RANK() OVER(业务逻辑)

作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。

说明:例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。即:1 1 3 4 5 5 7

SELECT id, name, score, rank() over(ORDER BY score DESC) AS 'rank' FROM student 

DENSE_RANK() OVER(业务逻辑) 

作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。

说明:和rank() over 的作用相同,区别在于dense_rank() over 排名是密集连续的。例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学接着下一个名次。即:1 1 2 3 4 5 5 6

SELECT id, name, score, dense_rank() over(ORDER BY score DESC) AS 'rank' FROM student 

ROW_NUMBER() OVER(业务逻辑)

作用:查出指定条件后的进行排名,条件相同排名也不相同,排名间断不连续

说明:这个函数不需要考虑是否并列,即使根据条件查询出来的数值相同也会进行连续排序。即:1 2 3 4 5 6

SELECT id, name, score, row_number() over(ORDER BY score DESC) AS 'rank' FROM student 

后记 

函数中的业务逻辑可以是复杂的,不局限于 ORDER BY,也可以加 PARTITION BY。

### 分班级排名
SELECT id, name, score, class, row_number() over(PARTITION BY class ORDER BY score DESC) AS 'rank' 
FROM student 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
rank() over、row_number() over和dense_rank() over都是窗口函数,用于在查询结果中为每一行分配一个排名row_number() over函数会为每一行分配一个唯一的整数值,按照指定的排序方式从1开始递增。如果有重复的值,它们将分配不同的行号。 rank() over函数会为具有相同排序值的行分配相同的排名,但会跳过下一个排名。例如,如果有两个行的排序值相同,并且排名为2,则下一个排名将为4。 dense_rank() over函数rank() over函数类似,也会为具有相同排序值的行分配相同的排名,但不会跳过下一个排名。例如,如果有两个行的排序值相同,并且排名为2,则下一个排名将为3。 总结起来,row_number() over函数为每一行分配唯一的行号,rank() over函数为具有相同排序值的行分配相同的排名并跳过下一个排名,而dense_rank() over函数为具有相同排序值的行分配相同的排名但不跳过下一个排名。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [mysql—排序函数rank() over()、dense_rank() over()、row_num() over()](https://blog.csdn.net/weixin_44262119/article/details/122461133)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值