偶然在論壇看到一個網友的帖子,關於他遇到一個面試題的,網站寫了很多,我看了一下,結果應該是沒問題的,但是為何面試官還是不滿意,我想面試官可能並不是想考你真能把這道題做出來,而是看你如何簡潔的通過一個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.結果如下: