mysql5.7使用变量进行分组排名并实现筛选

 更新时间:2024年05月01日 09:12:16   作者:好大的月亮  
这篇文章主要介绍了mysql5.7使用变量进行分组排名并实现筛选方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

概述

mysql到8.0之后就有rank和desc_rank函数了,但是在5.7没这玩意,想实现一个分组排名得靠自己手撸了.

分组排名

student表就id/姓名/分数/班级几个字段,加上class表就id/name两个字段。

需求是查询每个班级分数排名前三的所有人(不是3个人是所有人)

SELECT
@last_class := st.class,
CASE
		
	WHEN
		st.class = @last_class THEN
		CASE
				
				WHEN @score = st.score THEN
				@rank 
				WHEN ( @score := st.score ) IS NOT NULL THEN
				@rank := @rank + 1 
			END 
	ELSE @rank := 1 
END rank,
st.* 
FROM
	student st,(
	SELECT
		@score := NULL,
		@rank := 0,
		@last_class := NULL 
	) a 
ORDER BY
	st.class,
	st.score desc

结果

筛选

#EXPLAIN
SELECT
	a.id AS studentId,
	NAME,
	a.class,
	a.score 
FROM
	(
	SELECT
	@last_class := st.class,
	CASE
			
		WHEN
			st.class = @last_class THEN
				CASE
					
					WHEN @score = st.score THEN
					@rank 
					WHEN ( @score := st.score ) IS NOT NULL THEN
					@rank := @rank + 1 
					
				END 
		ELSE @rank := 1 
	END rank,
	st.* 
FROM
	student st,(
	SELECT
		@score := NULL,
		@rank := 0,
		@last_class := NULL 
	) aa 
ORDER BY
	st.class,
	st.score DESC 
	) a
	
	where a.rank <= 3

结果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL中describe命令的使用方法小结

    MySQL中describe命令的使用方法小结

    这篇文章主要介绍了MySQL中describe命令的使用方法小结,describe命令主要用于获取表或列等的各种信息,需要的朋友可以参考下
    2015-12-12
  • mysql获取排列序号的三种常用方法小结

    mysql获取排列序号的三种常用方法小结

    这篇文章主要介绍了mysql获取排列序号的三种常用方法,并通过代码示例和图文给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • Mysql多主一从数据备份的方法教程

    Mysql多主一从数据备份的方法教程

    这篇文章主要给大家介绍了关于Mysql多主一从数据备份的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-12-12
  • 浅析MySQL - MVCC

    浅析MySQL - MVCC

    这篇文章主要介绍了MySQL - MVCC的相关资料,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • 一条SQL语句在MySQL中是如何执行的

    一条SQL语句在MySQL中是如何执行的

    本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的,需要的朋友可以参考一下
    2021-10-10
  • MySQL8新特性:持久化全局变量的修改方法

    MySQL8新特性:持久化全局变量的修改方法

    这篇文章主要给大家介绍了关于MySQL 8新特性:持久化全局变量的修改的相关内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Mysql删除数据以及数据表的方法实例

    Mysql删除数据以及数据表的方法实例

    这篇文章主要给大家介绍了关于Mysql删除数据以及数据表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 如何利用Mysql计算地址经纬度距离实时位置

    如何利用Mysql计算地址经纬度距离实时位置

    最近工作中遇到了一个附近门店的功能,下面这篇文章主要给大家介绍了关于如何利用Mysql计算地址经纬度距离实时位置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • mysql之TIMESTAMP(时间戳)用法详解

    mysql之TIMESTAMP(时间戳)用法详解

    这篇文章主要介绍了mysql之TIMESTAMP(时间戳)用法,需要的朋友可以参考下
    2014-07-07
  • 详解隐秘的 MySQL 类型转换问题详解

    详解隐秘的 MySQL 类型转换问题详解

    这篇文章主要为大家介绍了详解隐秘的 MySQL 类型转换问题详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论