2013-03-28 52 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