首页 > 代码库 > mysql 实现row_number() 分组排序功能
mysql 实现row_number() 分组排序功能
数据库基本脚本
CREATE TABLE `a` ( `ID` INT(10) NULL DEFAULT NULL, `class` INT(10) NULL DEFAULT NULL, `score` INT(10) NULL DEFAULT NULL)COLLATE=‘utf8_general_ci‘ENGINE=InnoDB;insert into a values (1,1,110);insert into a values (2,1,120);insert into a values (3,1,130);insert into a values (4,1,140);insert into a values (5,2,210);insert into a values (6,2,220);insert into a values (7,2,230);insert into a values (8,2,240);insert into a values (9,3,310);insert into a values (10,3,320);insert into a values (11,4,410);
1. 对 class进行分组 取每组的前2条
select id,class,score,rank from (select b.id,b.class,b.score,@rownum:=@rownum+1 ,if(@pdept=b.class,@rank:=@rank+1,@rank:=1) as rank,@pdept:=b.classfrom (select id,class,score from a order by id ) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c ) resulthaving rank <3 ;
rank <3 指的相当月ruwnum<3 每组都自动给上了序号.多少条记录就多少个序号.指的是每组的.
2. 对 class 进行分组 取记录满足两天的,也就是rownum=2 的数据
select id,class,score,rank from (select b.id,b.class,b.score,@rownum:=@rownum+1 ,if(@pdept=b.class,@rank:=@rank+1,@rank:=1) as rank,@pdept:=b.classfrom (select id,class,score from a order by score desc ) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c ) resulthaving rank =2 ;
mysql 实现row_number() 分组排序功能
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。