2022/8/03(mysql增加排序列)
1,分组增加排序<1>

select score_info.*
,case when class = @last_class then @rank:=@rank+1 else @rank:=1 end as rank
,@last_class:=class
from score_info , 
(select @last_class:= '' , @rank:=0) T  
order by class 
,score desc;

将学生按照班级进行分组,然后根据分数进行排序。当两个学生班级分数和分数都相同时,rank不同,rank值不重复
(1, 定义两个变量@last_class:= ‘’ , @rank:=0;
(2,根据条件使用case when 函数或者 if 函数 ,当班级名称相同时,让@rank自增,否则给@rank赋值为1;
例如:,当查询走到第一行时,因为定义的@last_class为空,@rank=rank+1,所以@rank的值为1,以此类推;
(3,由此可得排序列

2,分组增加排序<2>

select score_info.*
,
@rank:= if(class = @last_class,if(score = @last_score,@rank,@incRank),1 and @incRank:=1))
@last_class:=class,
@last_score:=score,
@incRank := @incRank + 1,
from score_info , 
(select @last_class:= '' ,@last_score, @rank:=0,@incRank = 1) T  
order by class 
,score desc;

将学生按照班级进行分组,然后根据分数进行排序。当两个学生班级分数和分数都相同时,rank相同,之后当班级出现不同的分数是rank为之前rank+相同rank的人数
(1,定义三个变量 @last_class:= ‘’ ,@last_score, @rank:=0,@incRank = 1
(2,当班级不同时,第一个人对应的@rank为‘1’;当班级相同,分数相同时,@rank相同,在此条件下出现不同的分数之后@rank的值为上一个@rank的值加上重复分数的人数;若分数不同,@rank+1
例;查询出第一行时,@rank的值为1,
如果第二行是同一个班,且分数不同,@rank = @incRank,在一行时执行了@incRank自增, 所以@rank的值为2
当第二行的班级分数都相同时,@rank=@rank,也就是@rank的值不变
当第二行不是同一个班级,@rank=1 and @incRank=1,此时的@rank为1

3,分组增加排序<3>

select score_info.*
,
@rank:= if(class = @last_class,if(score = @last_score,@rank,@incRank),1 and @incRank:=1))
@last_class:=class,
@last_score:=score,
@incRank := @rank + 1,
from score_info , 
(select @last_class:= '' ,@last_score, @rank:=0,@incRank = 1) T  
order by class 
,score desc;

将学生按照班级进行分组,然后根据分数进行排序。当两个学生班级分数和分数都相同时,rank相同,之后当班级出现不同的分数是rank为之前rank+1
(1,定义三个变量 @last_class:= ‘’ ,@last_score, @rank:=0,@incRank = 1
(2,当班级不同时,第一个人对应的@rank为‘1’,当班级相同分数不同时,@rank自增,当班级相同,分数相同时,@rank相同,在此条件下出现不同分数,则@rank+1
例;查询出第一行时,@rank的值为1,
如果第二行是同一个班,且分数不同,@rank = @incRank,在一行时执行了@incRank := @rank + 1, 所以@rank的值为2
当第二行的班级分数都相同时,@rank=@rank,也就是@rank的值不变@rank为1
第二行都相同,第三行如果是同一个班,分数不同,执行第二条时@incRank := @rank + 1,
@incRank的值为2,此时@rank = @incRank 所以@rank为2,
当第二行不是同一个班级,@rank=1 and @incRank=1,此时的@rank为1

3,普通增加排序

SELECT
	a.*, @rank :=@rank+1 as no
FROM(    
    SELECT *
    from `student_score_table` 
	ORDER BY `score` desc
    )	a 
, (
    SELECT @rank :=0 
    ) b

将学生分数降序排列之后通过定义的@rank参数使其自增完成排序

4,心得
首先关于增加排序的问题,首先需要明确需要几个变量,大概是什么逻辑,然后再写
要保持思路清晰,不要自乱阵脚。