mysql 实现row_number() 分组排序功能
Posted 左侧码工
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:[email protected]+1 , if(@pdept=b.class,@rank:[email protected]+1,@rank:=1) as rank, @pdept:=b.class from ( select id,class,score from a order by id ) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c ) result having rank <3 ;
rank <3 指的相当月ruwnum<3 每组都自动给上了序号.多少条记录就多少个序号.指的是每组的.
2. 对 class 进行分组 取记录满足两天的,也就是rownum=2 的数据
select id,class,score,rank from ( select b.id,b.class,b.score,@rownum:[email protected]+1 , if(@pdept=b.class,@rank:[email protected]+1,@rank:=1) as rank, @pdept:=b.class from ( select id,class,score from a order by score desc ) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c ) result having rank =2 ;
以上是关于mysql 实现row_number() 分组排序功能的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL-实现sqlserver- row_number() over(partition by order by) 分组排序功能