mysql5.7使用變量進行分組排名并實現(xiàn)篩選
更新時間:2024年05月01日 09:12:16 作者:好大的月亮
這篇文章主要介紹了mysql5.7使用變量進行分組排名并實現(xiàn)篩選方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
概述
mysql到8.0之后就有rank和desc_rank函數(shù)了,但是在5.7沒這玩意,想實現(xiàn)一個分組排名得靠自己手擼了.
分組排名
student表就id/姓名/分數(shù)/班級幾個字段,加上class表就id/name兩個字段。
需求是查詢每個班級分數(shù)排名前三的所有人(不是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
結(jié)果

篩選
#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
結(jié)果

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
從MySQL 5.5遷移到Mariadb 10.1.14所遇到的問題
這篇文章主要介紹了從MySQL 5.5遷移到Mariadb 10.1.14所遇到的問題的相關(guān)資料,需要的朋友可以參考下2016-08-08
MySQL數(shù)據(jù)庫高危權(quán)限回收的實現(xiàn)
本文介紹MySQL數(shù)據(jù)庫的基本操作指令,包括查看和切換數(shù)據(jù)庫等,詳細講解了如何統(tǒng)計環(huán)境中的用戶及權(quán)限,并提供了權(quán)限回收的方法,包括回收高危權(quán)限和重新授權(quán)必要權(quán)限的過程,感興趣的可以了解一下2026-01-01

