2013-03-28 51 views
1

行我有問題,從最大列, 這裏的插圖讓行:http://sqlfiddle.com/#!3/15207/9SQL獲取基於最大列

基本上我想隨着年級的-ID(GID)相處學生的最高等級。但查詢不正確,因爲使用最高等級ID將返回2.

第一門課程,學生得到D(1分)。 第二次課程,學生得到E(0分)。

該1點的gradeid是1

我期望查詢結果爲:1(用戶ID),1(subjectid),1(gradeid),1(評分)

由於

UPDATE 01:

的更加改進的例子:http://sqlfiddle.com/#!3/97997/2

回答

3

UPDATE 1

WITH highestScore 
AS 
(
    SELECT a.uid StudentID, 
      a.uname StudentName, 
      b.Score, 
      c.cname CourseName, 
      c.semester, 
      d.sname SubjectName, d.sid, 
      DENSE_RANK() OVER (PARTITION BY a.uid, d.sid 
           ORDER BY b.Score DESC) rn 
    FROM Users a 
      INNER JOIN Grades b 
       ON a.uid = b.uid 
      INNER JOIN Courses c 
       ON b.cid = c.cid 
      INNER JOIN Subjects d 
       ON c.sid = d.sid 
) 
SELECT StudentID, StudentName, CourseName, semester, 
     SubjectName, Score 
FROM highestScore 
WHERE StudentID = 1 AND -- StudentID 
     sid = 1 AND  -- SubjectID 
     RN = 1    -- leave this as is (rank of the highest score) 
+0

它失敗了,當我加入這個例子http://sqlfiddle.com/#!3/97997/2再創紀錄(期望的結果是1,1,1, 1)對不起,我沒有在前面的例子中添加更多的行,因爲學生會有很多不同的科目和課程 – Bonn 2013-03-28 11:24:01

+0

讓我看看':D' – 2013-03-28 11:27:03

+0

這裏http://sqlfiddle.com/#!3/97997/2 – Bonn 2013-03-28 11:27:51