繁体   English   中英

选择一列以上的最大值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM