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 5.7.13 安装配置方法图文教程(win10)
这篇文章主要为大家分享了mysql 5.7.13 安装配置方法图文教程,感兴趣的朋友可以参考一下2016-06-06
解决Mysql5.7.17在windows下安装启动时提示不成功问题
这篇文章主要介绍了解决Mysql5.7.17在windows下安装启动时提示不成功问题,需要的朋友可以参考下2017-03-03
Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题
这篇文章主要介绍了Mysql 5.6 “隐式转换”导致的索引失效和数据不准确的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12
MySQL 中 datetime 和 timestamp 的区别与选择
MySQL 中常用的两种时间储存类型分别是datetime和 timestamp。如何在它们之间选择是建表时必要的考虑。下面就谈谈他们的区别和怎么选择,需要的朋友可以参考一下2021-09-09


最新评论