mysql5.7使用变量进行分组排名并筛选
Posted 好大的月亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
结果
以上是关于mysql5.7使用变量进行分组排名并筛选的主要内容,如果未能解决你的问题,请参考以下文章