了解MySQL中的排名功能

时间:2016-10-10 13:01:02

标签: mysql dense-rank

我试图在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 

1 个答案:

答案 0 :(得分:0)

您的排名算法基本上只是将每行的得分与前一行的得分进行比较,或者'' (第一行)。 如果得分相同,则返回相同的等级,如果得分改变,则将等级增加一。

编辑

顺便说一句,它在订购结果集后执行此操作。