获取SQL(oracle)中每个类别的值的最大值

问题描述 投票:0回答:1

让我们说说,我们拥有当前的课程表和该课程中每个学生的成绩。

表格:成绩

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中)以获取所需的输出?

sql database oracle greatest-n-per-group
1个回答
2
投票

您可以使用分析功能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子句中添加其他排序条件)。

© www.soinside.com 2019 - 2024. All rights reserved.