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

posted @ 2022-11-02 16:25  hushuer  阅读(3589)  评论(0编辑  收藏  举报