mysql使用自定義序列實現(xiàn)row_number功能(步驟詳解)
看了一些文章,終于知道該怎么在 mysql 里面實現(xiàn) row_number() 排序
話不多說,show you the code:
第一步:建表:
create table grades( `name` varchar(10), `subject` varchar(10), `score` int(10) )
第二步:寫入數(shù)據(jù)
insert into grades(name, subject, score) values('小明', '語文', 85), ('小華', '語文', 89), ('小李', '語文', 91), ('小芳', '語文', 93), ('小明', '數(shù)學', 77), ('小華', '數(shù)學', 95), ('小李', '數(shù)學', 83), ('小芳', '數(shù)學', 88), ('小明', '英語', 90), ('小華', '英語', 92), ('小李', '英語', 85), ('小芳', '英語', 88)
數(shù)據(jù)如下:
第三步:
需求:找出各科目單科第二的同學
首先,先排序:
select name, subject, score from grades order by subject, score desc
數(shù)據(jù)如下:
然后,每個科目按照分組排序
select (@i:=case when @subject_pre=t1.subject then @i+1 else 1 end) as rn, t1.*, (@subject_pre:=subject) from ( select name, subject, score from grades order by subject, score desc ) t1, (select @i:=0, @subject_pre:='') as t2 group by subject, score order by subject, score desc
解釋一下:
添加一個比較項 subject_pre, 記錄前一個科目是什么。
再加上一個自增的序列,實現(xiàn)index+1的功能。
因為數(shù)據(jù)已經是有序的,如果指向的科目和存儲的前一個科目相同,那么序號+1,否則的話,序號從1開始重新計算。
這樣就實現(xiàn)了分組排序。
最后,把 rn=2 的數(shù)據(jù)取出來
select name, subject, score from( select (@i:=case when @subject_pre=t1.subject then @i+1 else 1 end) as rn, t1.name, t1.subject, t1.score, (@subject_pre:=subject) from ( select name, subject, score from grades order by subject, score desc ) t1, (select @i:=0, @subject_pre:='') as t2 group by subject, score order by subject, score desc ) t where rn=2
最后結果如下:
這樣就使用mysql實現(xiàn)了row_number()的功能。
在網上找的資料,很多沒寫清楚,這里特地用一個示例把這個實現(xiàn)講清楚了,希望對你有幫助!
到此這篇關于mysql使用自定義序列實現(xiàn)row_number功能的文章就介紹到這了,更多相關mysql?row_number功能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL8.0.27安裝過程中卡在Initializing?Database中并報錯的解決
本文主要介紹了MySQL8.0.27安裝過程中卡在Initializing?Database中并報錯的解決,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05Mysql系列SQL查詢語句書寫順序及執(zhí)行順序詳解
這篇文章主要為大家介紹了Mysql系列SQL查詢語句的書寫順序及執(zhí)行順序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-10-10Mysql 5.7.17 winx64在win7上的安裝教程
本文給大家介紹Mysql 5.7.17 winx64在win7上的安裝教程,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-04-04使用mysqldump導入數(shù)據(jù)和mysqldump增量備份(mysqldump使用方法)
mysqldump常用于MySQL數(shù)據(jù)庫邏輯備份,下面看實例吧2013-12-12關于mysql create routine 權限的一些說明
下面小編就為大家?guī)硪黄P于mysql create routine 權限的一些說明。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03解決Navicat Premium 連接 MySQL 8.0 報錯"1251"的問題分析
這篇文章主要介紹了解決Navicat Premium 連接 MySQL 8.0 報錯"1251"的問題分析,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11Mysql+Keepalived實現(xiàn)雙主熱備方式
這篇文章主要介紹了Mysql+Keepalived實現(xiàn)雙主熱備方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10mysql?dblink跨庫關聯(lián)查詢的實現(xiàn)
本文主要介紹了mysql?dblink跨庫關聯(lián)查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02