mysql 排序num_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.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:=@rownum+1 ,
if(@pdept=b.class,@rank:=@rank+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 排序num_MySQL 实现row_number() 分组排序功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LACP模式
- 下一篇: MySQL修改表字段的长度