MySQL实现ORALCE的row_number()over(partition by xx)功能_MySQL
程序员文章站
2022-06-08 23:12:18
...
比如有个需求,要找出班级里每门课分数最高的学生(课程名称,分数,学生姓名),注意这里不是只取最高分,要把课程名称,分数,学生姓名都取出来!
heyf_tmp.score,
heyf_tmp.name,
@rownum:=@rownum+1,
if(@pdept=heyf_tmp.course,@rank:=@rank+1,@rank:=1) as rank, -- 分组字段
@pdept:=heyf_tmp.course
from
(select course,name,score
from temp_student_score
order by course,score desc -- 分组字段,排序字段
) heyf_tmp ,
在ORALCE里我们可以用ROW_NUMBER()OVER轻松实现,但是在mysql里就有点麻烦了,不过还是可以做的。
select course,score,name
from
(select
heyf_tmp.course,heyf_tmp.score,
heyf_tmp.name,
@rownum:=@rownum+1,
if(@pdept=heyf_tmp.course,@rank:=@rank+1,@rank:=1) as rank, -- 分组字段
@pdept:=heyf_tmp.course
from
(select course,name,score
from temp_student_score
order by course,score desc -- 分组字段,排序字段
) heyf_tmp ,
(select @rownum :=0,@pdept := null ,@rank:=0) a
) a where rank=1
最后我们只用取出RANK=1的部分就可以了
上一篇: 使用ps修改数码照片尺寸大小的图文方法
下一篇: 详解微信小程序开发实例
推荐阅读
-
MYSQL-实现sqlserver- row_number() over(partition by order by) 分组排序功能
-
mysql 如何实现类似row_number() over partition by多个字段分组排序
-
mysql中如何实现 row_number分组求topN的功能
-
MySQL实现ORALCE的row_number()over(partition by xx)功能_MySQL
-
MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序_MySQL
-
MYSQL-实现sqlserver- row_number() over(partition by order by) 分组排序功能
-
mysql实现分组聚合(ROW_NUMBER() OVER( [PARTITION BY column_1, column_2,…] [ORDER BY column_3,colum)
-
mysql 如何实现类似row_number() over partition by多个字段分组排序
-
mysql中如何实现 row_number分组求topN的功能
-
MySQL数据库与其他数据库的3个常用语法区别(外链接、分组排序row_number() over(partition by ) 、group by和distinct)