假设我有如下表为多个列选择最大值?
Students (StudentID, StudentName)
StudentMarks (StudentID, Mark)
我需要选择具有最高分的学生..如果有一个以上的学生有相同的标记(和它的最高分)。根据然后选择命名(字母)
我该怎么做?在此先感谢
假设我有如下表为多个列选择最大值?
Students (StudentID, StudentName)
StudentMarks (StudentID, Mark)
我需要选择具有最高分的学生..如果有一个以上的学生有相同的标记(和它的最高分)。根据然后选择命名(字母)
我该怎么做?在此先感谢
SELECT s.StudentName, sm.Mark
FROM Students s
INNER JOIN StudentMarks sm ON sm.StudentID = s.StudentID
WHERE sm.Mark = (SELECT MAX(Mark) FROM StudentMarks)
ORDER BY s.StudentName
我已经怎么样
select *
from students s
inner join studentmarks m on m.studentid = s.studentid
where m.mark = (select Max(mark) from studentmarks)
order by s.StudentName
没有测试过这一点,但它听起来正确
SELECT StudentID, StudentName
FROM Students
JOIN StudentMarks USING (StudentID)
WHERE Mark =
(SELECT MAX(Mark) FROM StudentMarks)
ORDER BY StudentName
'StudentMarks.Mark'也可以缩写为'Mark'。 – Powerlord 2010-07-26 14:02:34
其他选项
SELECT * FROM Students where StudentId in (SELECT StudentID FROM Mark Where Mark = Max(Max));
或
个SELECT s.* FROM Students where exists (SELECT StudentID FROM Mark m Where Mark = Max(Max) and m.StudentId = s.StudentId);
如果您的RDBMS支持解析函数
WITH Ranked AS
(
SELECT RANK() OVER(ORDER BY Mark DESC) AS Rnk,
Students.StudentID,
Students.StudentName,
Mark
FROM Students
JOIN StudentMarks ON Students.StudentID = StudentMarks.StudentID
)
SELECT StudentID,
StudentName,
Mark
FROM Ranked
WHERE Rnk=1
ORDER BY StudentName
或为规范的其他解释...
WITH RowNumbered AS
(
SELECT ROW_NUMBER() OVER(ORDER BY Mark DESC, StudentName ASC) AS Num,
Students.StudentID,
Students.StudentName,
Mark
FROM Students
JOIN StudentMarks ON Students.StudentID = StudentMarks.StudentID
)
SELECT StudentID,
StudentName,
Mark
FROM RowNumbered
WHERE Num=1
这只是需要一个简单的加入,并选择第一条记录.. (,根据规格进行预订)
SELECT TOP 1
S.StudentName, SM.Mark
FROM
Students S
INNER JOIN StudentMarks SM ON SM.studentID = S.StudentID
ORDER BY
SM.Mark DESC,
S.StudentName ASC
我没有downvote你,但是这个语法只是SQL Server(并且需要'WITH TIES'来匹配规范) - 尽管实际上这可能仍然不起作用,因为你在ORDER BY中有2个cols。 – 2010-07-26 14:23:21
@downvoter,我将不胜感激评论为downvote的原因.. – 2010-07-26 14:23:40
@实际上又读过这个问题 - 我不知道我提出的第二点。我不清楚规格。 – 2010-07-26 14:27:40
......怎么
SELECT *
FROM Students
WHERE StudentID IN (SELECT StudentID
FROM StudentMarks
WHERE Mark = (SELECT MAX(Mark)
FROM StudentMarks))
ORDER BY StudentName
LIMIT 1;
(上VASH的回答扩展到从中取出非标准功能)。
从这里我不认为'LIMIT'是在任何标准http://troels.arvin.dk/db/rdbms/#select-limit – 2010-07-26 14:45:15
你可能是对的;我总是被教导“限制n行”,但尽管这是几乎任何人都实现的标准。从我在这个网站上看到的,几乎没有人使用它... – 2010-07-26 14:52:18
我只是看了以前的作业文件从去年的底漆:) – 2010-07-26 13:44:32
这功课? – 2010-07-26 13:44:39
你只能从这个查询中得到一个结果吗? – NullUserException 2010-07-26 13:44:49