首页 >数据库 >mysql教程 >MySQL实现ORALCE的row_number()over(partition by xx)功能_MySQL

MySQL实现ORALCE的row_number()over(partition by xx)功能_MySQL

WBOY
WBOY原创
2016-06-01 13:07:591351浏览

比如有个需求,要找出班级里每门课分数最高的学生(课程名称,分数,学生姓名),注意这里不是只取最高分,要把课程名称,分数,学生姓名都取出来!

在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的部分就可以了

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn