我试图在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”时,我得到了输出,它是这样的:
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
答案 0 :(得分:0)
您的排名算法基本上只是将每行的得分与前一行的得分进行比较,或者'' (第一行)。 如果得分相同,则返回相同的等级,如果得分改变,则将等级增加一。
编辑
顺便说一句,它在订购结果集后执行此操作。