ORACLE分科目統計每科前三名的學生的語句


有個成績表 score(student_no,Subject_no,Score)分別為學號,課程號,成績。我想用語句查詢出每科的前三名學生的學號,請各位高手教教小弟

1.創建測試語句:
create table score(student_no varchar2(3),Subject_no varchar2(20),Score number);
insert into score values('001','語文',70);
insert into score values('001','數學',60);
insert into score values('001','英語',90);

insert into score values('002','語文',78);
insert into score values('002','數學',67);
insert into score values('002','英語',80);

insert into score values('003','語文',89);
insert into score values('003','數學',60);
insert into score values('003','英語',97);

insert into score values('004','語文',50);
insert into score values('004','數學',67);
insert into score values('004','英語',70);

insert into score values('005','語文',79);
insert into score values('005','數學',65);
insert into score values('005','英語',79);

insert into score values('006','語文',74);
insert into score values('006','數學',56);
insert into score values('006','英語',87);
commit;
2.產生結果:
select * from (
select t.*,row_number() over(partition by t.subject_no order by t.score desc) pm from score t) where pm<4;

STUDENT_NO SUBJECT_NO SCORE PM
002 數學 67 1
004 數學 67 2
005 數學 65 3
003 英語 97 1
001 英語 90 2
006 英語 87 3
003 語文 89 1
005 語文 79 2
002 語文 78 3

或者以下SQL:
select* from score s1 where Score in( select Score from score s2
where s2.Subject_no=s1.Subject_no and rownum<=3
)order by s1.Subject_no,s1.Score desc

轉自:http://zhidao.baidu.com/link?url=Y3KzpLugzm4HIIJXMlgOQEU-MZmeo0avJ1ZBcQ66DwWtLUaIIP9X3EsVsGCFqXfpBGUaBfcMDoCV2dOSLX8Bdq


免責聲明!

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



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