SQL中ROW_NUMBER() 使用


--語法形式:    ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) 
--解釋:     根據COL1分組,在分組內部根據 COL2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的)
--常用的使用場景: 取每個學科的前3名
--
1.創建測試表 create table #score ( name varchar(20), subject varchar(20), score int ) --2.插入測試數據 insert into #score(name,subject,score) values('張三','語文',98) insert into #score(name,subject,score) values('張三','數學',80) insert into #score(name,subject,score) values('張三','英語',90) insert into #score(name,subject,score) values('李四','語文',88) insert into #score(name,subject,score) values('李四','數學',86) insert into #score(name,subject,score) values('李四','英語',88) insert into #score(name,subject,score) values('李明','語文',60) insert into #score(name,subject,score) values('李明','數學',86) insert into #score(name,subject,score) values('李明','英語',88) insert into #score(name,subject,score) values('林風','語文',74) insert into #score(name,subject,score) values('林風','數學',99) insert into #score(name,subject,score) values('林風','英語',59) insert into #score(name,subject,score) values('嚴明','英語',96) --3.取每個學科的前3名數據 select * from ( select subject,name,score,ROW_NUMBER() over(PARTITION by subject order by score desc) as num from #score ) T where T.num <= 3 order by subject --4.刪除臨時表 drop table #score

結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM