SQL查詢每門課程的前幾名
在SQL Server 資料庫中,有一個表StudentAchievement(學生成績),
它有三個欄位:StudentID(varchar(8),學生編號),CourseID(varchar(10),課程編號),Achievement(int ,成績),
寫一條SQL語句,篩選出每門課程的前兩名的學生編號,課程編號,成績並排序。
--方法一
--將每科前兩名學生的ID取出
/*
這是個自連線問題,可以這樣想,就是把studentachievement表看成兩個表,A和B,
A取的是B表中篩選出來的ID,而B表中篩選出來的ID則要靠A中的courseID來篩選,
即A表裡選出來的是和B表courseID
*/
SELECT *
FROM STUDENTACHIEVEMENT A
WHERE STUDENTID IN (SELECT TOP 2 STUDENTID
FROM STUDENTACHIEVEMENT B
WHERE B.COURSEID = A.COURSEID
ORDER BY B.ACHIEVEMENT DESC)
ORDER BY A.COURSEID, A.ACHIEVEMENT DESC
--方法二
--
SELECT *
FROM STUDENTACHIEVEMENT A
WHERE (SELECT COUNT(*)
FROM STUDENTACHIEVEMENT B
WHERE B.COURSEID = A.COURSEID
AND B.ACHIEVEMENT >= A.ACHIEVEMENT) <= 2
ORDER BY A.COURSEID, A.ACHIEVEMENT DESC