|
概述
mysql到8.0之后就有rank和desc_rank函数了,但是在5.7没这玩意,想实现一个分组排名得靠自己手撸了.
分组排名
表就id/姓名/分数/班级几个字段,加上表就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
复制代码 结果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://www.jb51.net/database/320522u1a.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|