让我们说说,我们拥有当前的课程表和该课程中每个学生的成绩。
表格:成绩
Math: ANDY 80
Math: RYAN 70
Math: SARAH 95
Science: RYAN 60
Science: ANDY 90
Science: SARAH 75
我想写一个查询来获取主题的名称,最高分的人以及它的名字。
查询的输出应为以下内容:
Math SARAH 95
Science ANDY 90
什么是SQL(在oracle中)以获取所需的输出?
您可以使用分析功能rank()
:
select *
from (
select g.*, rank() over(partition by subject order by mark desc) rn
from grades
) t
where rn = 1
[在子查询中,分析功能通过在具有相同mark
的组中将subject
降序对每个记录进行排名。然后,外部查询过滤每个组的顶部记录。如果有关系,则将它们全部返回(您可以使用row_number()
避免这种情况,或在order by
子句中添加其他排序条件)。