1. 程式人生 > >SQL查詢每門課程的前幾名

SQL查詢每門課程的前幾名

sql server查詢每門課程的前兩名的學生編號,課程編號,成績並排序。

在SQL Server 資料庫中,有一個表StudentAchievement(學生成績),

它有三個欄位:StudentID(varchar(8),學生編號),CourseID(varchar(10),課程編號),Achievement(int ,成績)

寫一條SQL語句,篩選出每門課程的前兩名的學生編號,課程編號,成績並排序。

--方法一

--將每科前兩名學生的ID取出

/*

這是個自連線問題,可以這樣想,就是把studentachievement表看成兩個表,AB

A取的是B表中篩選出來的ID,而B表中篩選出來的ID則要靠A中的courseID來篩選,

A表裡選出來的是和BcourseID

相同的,但在B表中佔前兩項的值。

*/

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

--方法二

--

以科目,按成績給記錄編號,然後取出編號<=2的,就是每科前兩名

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