MySQL分组排序

在MySQL8.0以下版本,由于没有窗口函数导致MySQL进行分组排序问题特别复杂,废话不多说,先说表,新建一学生成绩表----student_score

学生姓名 student_name
学生班级 class
分数 score

MySQL8.0

MySQL8.0 有了窗口函数,就可以使用序号函数 rank() ,over是关键字,用来指定函数执行的窗口范围括号里指定用partition by 进分组,order by 进行排序

select score,class,student_name RANK() over (partition by class order by score desc) from student_score 

 MySQL8.0以下版本

MySQL低版本没有虽然没有窗口函数,但是我们可以使用MySQL的另一个功能---变量,来实现分组排序功能

SELECT
	score,class,student_name
CASE
		WHEN class = @last_class THEN
		@group_count := @group_count + 1
		else
		@group_count := 1
	END AS group_count,
CASE
		WHEN class = @last_class THEN
		IF(score=@last_score ,@rank :=  @rank, @rank := @group_count)
	else @rank :=@group_count
	END AS rank,
	@last_class := class,
	@last_score := score 
FROM
	student a,
	( SELECT @last_class := '', @rank := 1, @group_count := 1, @last_score := 0 ) T 
	where score is not null
ORDER BY
	class,
	score DESC

 说一下具体思路,其实很简单,就是通过每组的个数,来对每一组不同分数来进行标记排序,不了解变量的可以自行搜索,我这里就不做过多解释

 

你可能感兴趣的:(mysql)