mysql数据排名

一、mysql8.0以下

1、同分不同名

select name,score,ranking from (
	select 
		name,
		score,
		@num3:=@num3+1 as ranking
	from 
		(select id,name,score from user_score order by score desc) us,
		(select @num3:=0) s
) t

在这里插入图片描述

2、同分同名

select name,score,ranking from (
	select 
		name,
		score,
		@num1:=(case when @num2=score then @num1 else @num3 end) as ranking,
		@num3:=@num3+1,
		@num2:=score
	from 
		(select id,name,score from user_score order by score desc) us,
		(select @num1:=0,@num2:=null,@num3:=1) s
) t

在这里插入图片描述

解析1:

(select @num1:=0,@num2:=null,@num3:=1) s

初始化三个变量,等同于在sql最前面写“set @num1=0; ”:
@num1:记录当前排名
@num2:记录分数
@num3:记录真实排名

解析2:

@num1:=(case when @num2=score then @num1 else @num3 end)

如果当前变量@num2记录的分数(row-1 行)与当前这一行(row 行)的分数一样,则代表排名一致,用变量@num1记录的排名(也就是 row-1 行的排名)

解析3:

(select id,name,score from user_score order by score desc) us

将需要排名的数据进行排序

二、mysql8.0以上
前往:
《sql 四大排名函数—(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介》

猜你喜欢

转载自blog.csdn.net/kotooaaa/article/details/107731738
今日推荐