mysql——常用函数之partition by
参考:
https://www.cnblogs.com/xiaohuizhenyoucai/p/10636747.html
https://www.jianshu.com/p/785f0edac47f
partition by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,
Demo
数据库表结构 学生成绩表 UserGrade
Id int Checked 主键Id
Name varchar(50) Checked 学生名
Course varchar(50) Checked 课程名
Score int Checked 分数
01、把每个人学生的各科目成绩按照升序排名 (思路:根据学生姓名分组,然后这个学生的各科成绩排序)
select *,ROW_NUMBER() over( partition by Name order by Score )排名
from UserGrade
查询结果
Id Name Course Score 排名
1004 李四 数学 60 1
1005 李四 语文 80 2
1001 李四 英语 100 3
1007 王五 数学 30 1
1006 王五 语文 50 2
1003 王五 英语 50 3
1008 张三 英语 60 1
1000 张三 语文 80 2
1002 张三 数学 90 3
02、可以去掉order by(仅分区,分区内的值不排序)
03、可以将row_number换为rank(),这样当某个学生两科成绩相同时,则排名值相同
select *,RANK() over( partition by Name order by Score )排名
from UserGrade
查询结果
Id Name Course Score 排名
1004 李四 数学 60 1
1005 李四 语文 80 2
1001 李四 英语 100 3
1007 王五 数学 30 1
1006 王五 语文 50 2
1003 王五 英语 50 2
1008 张三 英语 60 1
1000 张三 语文 80 2
1002 张三 数学 90 3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下