sql語句查詢成績表各科前三名


--語法形式:    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