mysql5.7使用變量進(jìn)行分組排名并實(shí)現(xiàn)篩選
概述
mysql到8.0之后就有rank和desc_rank函數(shù)了,但是在5.7沒(méi)這玩意,想實(shí)現(xiàn)一個(gè)分組排名得靠自己手?jǐn)]了.
分組排名
student
表就id/姓名/分?jǐn)?shù)/班級(jí)幾個(gè)字段,加上class
表就id/name兩個(gè)字段。
需求是查詢每個(gè)班級(jí)分?jǐn)?shù)排名前三的所有人(不是3個(gè)人是所有人)
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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL中實(shí)現(xiàn)高性能高并發(fā)計(jì)數(shù)器方案(例如文章點(diǎn)擊數(shù))
這篇文章主要介紹了MySQL中實(shí)現(xiàn)高性能高并發(fā)計(jì)數(shù)器方案,本文中的計(jì)數(shù)器是指如文章的點(diǎn)擊數(shù)、喜歡數(shù)、瀏覽次數(shù)等,需要的朋友可以參考下2014-10-10MySQL的查詢計(jì)劃中ken_len的值計(jì)算方法
本文首先介紹了MySQL的查詢計(jì)劃中ken_len的含義;然后介紹了key_len的計(jì)算方法;最后通過(guò)一個(gè)偽造的例子,來(lái)說(shuō)明如何通過(guò)key_len來(lái)查看聯(lián)合索引有多少列被使用2017-02-02mysql 5.7.13 安裝配置方法圖文教程(win10)
這篇文章主要為大家分享了mysql 5.7.13 安裝配置方法圖文教程,感興趣的朋友可以參考一下2016-06-06解決Mysql5.7.17在windows下安裝啟動(dòng)時(shí)提示不成功問(wèn)題
這篇文章主要介紹了解決Mysql5.7.17在windows下安裝啟動(dòng)時(shí)提示不成功問(wèn)題,需要的朋友可以參考下2017-03-03Mysql 5.6 "隱式轉(zhuǎn)換"導(dǎo)致的索引失效和數(shù)據(jù)不準(zhǔn)確的問(wèn)題
這篇文章主要介紹了Mysql 5.6 “隱式轉(zhuǎn)換”導(dǎo)致的索引失效和數(shù)據(jù)不準(zhǔn)確的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12MySQL中必須了解的13個(gè)關(guān)鍵字總結(jié)
這篇文章主要為大家詳細(xì)介紹了MySQL中必須了解學(xué)會(huì)的13個(gè)關(guān)鍵字,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們掌握MySQL有一定的幫助,需要的可以了解下2023-09-09MySQL 中 datetime 和 timestamp 的區(qū)別與選擇
MySQL 中常用的兩種時(shí)間儲(chǔ)存類型分別是datetime和 timestamp。如何在它們之間選擇是建表時(shí)必要的考慮。下面就談?wù)勊麄兊膮^(qū)別和怎么選擇,需要的朋友可以參考一下2021-09-09軟件測(cè)試-MySQL(六:數(shù)據(jù)庫(kù)函數(shù))
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04