astak16/blog-mysql

21 分数排名

Opened this issue · 0 comments

题目

查询实现分数排名,如果两个分数相同,这排名相同。

create table scores (
	id int,
	score double
)

insert into scores values(1,3.50),(2,3.65),(3,4.00),(4,3.85),(5,4.00),(6,3.65)

SQL:方法一

select score,
	case
		when @pre=score then @rank:=@rank
		when @pre:=score then @rank:=@rank + 1
	end as 排名
from scores, (select @pre=null, @rank:=0) as init
order by score desc;

解析

  • 按照 score 进行降序排列
  • 使用 case ... when ... then ... end 算出排名

SQL:方法二

select score, dense_rank() over(order by score desc) as 排名 from scores;

解析

使用 dense_rank() 排名函数