mysql制造变量自动排序或者实现类似hive中row_number over(partition by id,name order by salary desc)组内排序
建表:
create table if not exists student(
name VARCHAR(256)
,age INT
,class VARCHAR(256)
,project VARCHAR(256)
,score INT
,id INT
,PRIMARY KEY(id)
);
执行sql的语句
select
a.*,
case when class=@last_newid then @num:= @num + 1 else @num:=1 end AS rank
,@last_newid:=class
from student a,
(select @last_newid:=NULL,@num:=0) t
order by a.score desc;

按照每个班分组取前俩名分数同学
SELECT
t.*
FROM
(select
a.*,
case when class=@last_newid then @num:= @num + 1 else @num:=1 end AS rank
,@last_newid:=class
from student a,
(select @last_newid:=NULL,@num:=0) t
order by a.class,a.score desc ) t
where rank<3;
切记 将班级和分数一起排序

本文介绍如何使用MySQL变量实现类似Hive中的row_number()功能,进行组内排序。通过创建临时变量并在查询中更新其值,可以为每组内的记录分配一个排名,最后筛选出各组的前几名。此方法适用于需要对数据进行分组并按特定字段排序的场景。
817

被折叠的 条评论
为什么被折叠?



