mysql排名函数应用row_number()、rank()、dense_rank()
目录
1 前言
我们通常需要在sql中去处理一些排名的问题,因为将数据全部查询出来在内存中去出来排名这样很耗费内存并且严重影响服务器运行速度。近期在开发中就遇到了类似的问题,所以以此来记录下。
2 排名函数
数据准备:
2.1 row_number()
描述:row_number() :给记录按照顺序添加记行号
sql:SELECT user.*,row_number() over(ORDER BY age desc) as '序号'
FROM user
2.2 rank()
描述:按照顺序进行排名,如果年龄相同,排名并列,中间有间隔。
sql:SELECT user.*,rank() over(ORDER BY age desc) as '年龄排名'
FROM user
2.3 dense_rank()
描述:按照顺序进行排名,如果年龄相同,排名并列,中间没有有间隔。
sql:SELECT user.*,dense_rank() over(ORDER BY age desc) as '年龄排名'
FROM user
3 总结
函数名称 | 作用 | 易错点 | 场景 |
row_number() | 按照顺序依次编号 | 依次编号 | 返回列表时,增加序号 |
rank() | 按照顺序编号、有间隔 | 有间隔 | 给字段增加排名,排名相同时下个排名自动跳过 |
dense_rank() | 按照顺序编号、无间隔 | 无间隔 | 给字段增加排名,排名相同时下个排名不会跳过 |