Mysql数据分组排名实现的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1。数据源
2。数据整体排名
1)普通排名
从1开始,按照顺序一次往下排(相同的值也是不同的排名)。
set @rank =0; select city , 分数,, @rank :=, @rank + 1, rank 得到cs order by  score desc;
结果如下:
2)并列排名
相同的值是相同的排名(但是不留空位)。
set @rank=0, @price=零; select c . *,, ,case when @price =, score then @rank ,when @price :=, score then @rank :=, @rank + 1,最终获得rank , ,得到cs order  by score desc; ,——当查询的score 值,=,@price时,输出@rank, ,——当不等时,将分数值赋给@price ,并输出@rank :=, @rank + 1 , ——,或者 set @rank=0, @price=零; select a.city、a.score a.rank 得到; (select cs。*, @rank :=,如果(@p=分数,@rank, @rank + 1),排名, @p :=,得分 得到cs order by  score desc),一个;
结果如下:
3)并列排名
相同的值是相同的排名(但是留空位)。
set @rank=0, @price=零,@z=1; select a.city、a.score a.rank 得到; (select cs。*, @rank :=,如果(@p=分数,@rank, @z),排名, @p :=,分数,@z :=@z + 1 得到cs order by  score desc),一个;
结果如下:
3。数据分组后组内排名
1)分组普通排名
从1开始,按照顺序一次往下排(相同的值也是不同的排名)。
set @rank=0, @c=零; select cs.city cs.score, @rank :=,如果(@c =,城市,@rank + 1, - 1),排名, @c :=, 得到cs order by  cs.city cs.score;
结果如下:
2)分组后并列排名
组内相同数值排名相同,不占空位。
set @rank=0, @c=null, @=零; select cs.city cs.score, @rank :=,如果(@c=城市,如果(@=分数、@rank @rank + 1), 1), rank , @c :=,城市, @s :=score 得到cs order by  cs.city cs.score;
结果如下:
3)分组后并列排名
组内相同数值排名相同,需要占空位。
set @rank=0, @c=null, @=零; select cs.city cs.score, @rank :=,如果(@c=城市,如果(@=分数、@rank @rank + 1), 1), rank , @c :=,城市, @s :=score 得到cs order by  cs.city cs.score;
结果如下:
4。分组后取各组的前两名
①方法一:按照分组排名的三种方式,然后限定排名的值
set @rank=0, @z=0, @c=null, @=零; select a.city a.score a.rank 得到; (select cs.score  cs.city 城市;分数, @z :=,如果(@c=城市,@z + 1, - 1), @rank :=,如果(@c=城市,如果(@=分数,@rank @z), 1),排名, @c :=,城市, @s :=score 得到cs order by  cs.city cs.score desc), where a.rank<=2,Mysql数据分组排名实现的示例分析