SQL排名函数
今天看到这样一道题,实现分数的排名,特此做下笔记以供后来参考
这道题最开始使用的是普通的查询,没有使用函数
select s1.Score,(select count(DISTINCT s2.Score) from Scores s2 where s2.Score>=s1.Score) as `Rank` from Scores s1 order by s1.Score desc
后来我知道了还有排名函数
我们这样查询也可以实现
select Score,dense_rank() over(order by Score desc) as `Rank` from Scores
然后我在网上查了查排名名函数的用法总结在下面
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
本文来自博客园,作者:Diamond-fz,转载请注明原文链接:https://www.cnblogs.com/fzstudy/p/14652121.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下