SQL 根据最大列获取行
Posted
技术标签:
【中文标题】SQL 根据最大列获取行【英文标题】:SQL Get rows based on max column 【发布时间】:2013-03-18 18:14:15 【问题描述】:我在从最大列中获取行时遇到问题, 这里是插图:http://sqlfiddle.com/#!3/15207/9
基本上我想获得学生的最高成绩以及成绩ID(gid)。但查询不正确,因为使用了 maxgrade id,它将返回 2。
第一门课,学生得了 D(1 分)。 第二次参加课程,学生获得 E(0 分)。
该 1 分的等级 ID 为 1。
我希望查询结果是:1(userid),1(subjectid),1(gradeid),1(score)
谢谢
更新 01:
更完善的例子:http://sqlfiddle.com/#!3/97997/2
【问题讨论】:
【参考方案1】:更新 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)
SQLFiddle Demo
【讨论】:
在此示例中添加另一条记录时失败 sqlfiddle.com/#!3/97997/2 (预期结果为 1,1,1,1) 抱歉,我没有在前面的示例中添加更多行,因为学生将有许多不同的科目和课程 让我看看例子:D
查看我的更新答案。它使用common table expression
和window function
查看我的更新答案,或者如果您对 ID 更感兴趣,请参阅此处sqlfiddle.com/#!3/97997/17以上是关于SQL 根据最大列获取行的主要内容,如果未能解决你的问题,请参考以下文章