MYSQL如何实现row_number()over()函数功能
2019-06-02 本文已影响40人
敢敢宝宝
我们在学习MYSQL时,最让我们头疼的一个问题是:如何实现分组排序。我们都知道MYSQL没有一个专门的函数。让我们一起来探索,如何实现分组排序呢?
一:创建表格
use data;
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);
二:代码编写
set @rank:=0;
set @CI:=null;
select SId,CId,score,rank from(
select
SId, CId,score,
@rank:=if(@CI=CId,@rank+1,1) as rank,
@CI:=CId
from data.sc
order by CId,score desc) as t1
输出结果:
注意:
第一:设置变量并赋值时,符号是:=
第二:一定要进行排序order by ,否则会出现这样的情况: