SQL統計每科前三名的學生的語句


偶然在論壇看到一個網友的帖子,關於他遇到一個面試題的,網站寫了很多,我看了一下,結果應該是沒問題的,但是為何面試官還是不滿意,我想面試官可能並不是想考你真能把這道題做出來,而是看你如何簡潔的通過一個sql語句就完成,重點我想是面試官想看到"row_number"  "partition"這樣的關鍵字吧

下面說下具體分析做法

有個成績表 StuScore(StuId,Subject,Score)分別為學號,課程名,成績。

問題:用語句查詢出每科的前三名學生的學號

1.創建測試sql語句

create table StuScore(StuId int,Subject nvarchar(10),Score float);

insert into StuScore values(1,'語文',70);
insert into StuScore values(1,'數學',60);
insert into StuScore values(1,'英語',90);

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

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

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

insert into StuScore values(5,'語文',79);
insert into StuScore values(5,'數學',65);
insert into StuScore values(5,'英語',79);

insert into StuScore values(6,'語文',74);
insert into StuScore values(6,'數學',56);
insert into StuScore values(6,'英語',87);

2.查詢語句:

select * from (
    select *,ROW_NUMBER() over(partition by Subject order by Score desc) RN from StuScore
) T where RN<4

3.結果如下:

 


免責聲明!

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



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