[英]select max for more than one column?
假设我有下表
Students (StudentID, StudentName)
StudentMarks (StudentID, Mark)
我需要选择分数最高的学生..如果有多个学生具有相同的分数(及其最高分数),然后根据姓名顺序(按字母顺序)进行选择
我怎样才能做到这一点? 提前致谢
我还没有测试过,但是听起来不错
SELECT StudentID, StudentName
FROM Students
JOIN StudentMarks USING (StudentID)
WHERE Mark =
(SELECT MAX(Mark) FROM StudentMarks)
ORDER BY StudentName
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 * 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
怎么样...
SELECT *
FROM Students
WHERE StudentID IN (SELECT StudentID
FROM StudentMarks
WHERE Mark = (SELECT MAX(Mark)
FROM StudentMarks))
ORDER BY StudentName
LIMIT 1;
(扩展Vash的答案以从中删除非标准功能)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.