我正在尝试使用 MySQL 中的变量来了解密集排名。
我创建了一个像这样的表:
create table scores (id int,score float);
像这样插入值:
insert into scores values(1,3.50);
insert into scores values(2,3.65);
insert into scores values(3,4.00);
insert into scores values(4,3.85);
insert into scores values(5,4.00);
insert into scores values(6,3.65);
我写的查询使用这样的分数对表进行排名:
set @rank=0;
set@score='';
select score,
(@rank := if(@score = score,
@rank,
if(@score := score,
@rank+1,
@rank
)
)
) as rank
from scores
order by score desc;
当我按分数 desc 运行查询“无”顺序时,输出是这样的:
score rank
3.5 1
3.65 2
4 3
3.85 4
4 5
3.65 6
当我按分数 desc 运行查询“with” order 时,我得到了输出,它是这样的:
score rank
4 1
4 1
3.85 2
3.65 3
3.65 3
3.5 4
使用下面的代码段时内部会发生什么?
select score,
(@rank := if(@score = score,
@rank,
if(@score := score,
@rank+1,
@rank
)
)
) as rank
from scores