概述
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
成果

总结
以上为自我经验,心愿能给大师一个参考,也心愿大家2多多支撑剧本之野。

发表评论 取消回复