我需要使用 INNER JOIN 对每个学生的总值求和,然后找到具有最大值的行。
我使用下面的查询来查找每个学生的总和并按降序排序显示所有学生,包括具有最大值的学生。
Select S.Student_ID, S.Student_Name, SUM(A.Score) as "TOTAL_SCORE"
from Student S
inner join Attempt A
on S.Student_ID = A.Student_ID
group by S.Student_ID, S.Student_Name
order by 3 desc;
我只需要显示具有最大值的学生,但它显示一个空表。
Select S.Student_ID,
S.Student_Name,
MAX(A.Score) as "TOTAL SCORE"
from Student S
inner join Attempt A
on S.Student_ID = A.Student_ID
where A.Score = (select SUM(A.Score)
from Student S)
group by S.Student_ID, S.Student_Name;`
这是否必须使用 MAX 完成,或者是否有其他方法可以做到这一点,如果后者那么如何。
不知道我是否可以解释得比这更简单。
完成您正在寻找的一种方法是使用ROWNUM 伪列。请注意,您需要在内联视图中定义您的 ORDER BY 或通过其他方法来避免人们陷入的常见陷阱。这是一种方法:
从 Oracle 12c 开始,您可以使用扩展
ORDER BY
语法仅返回第一行。这是一个例子: