Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取SQL(oracle)中每个类别的最大值_Sql_Database_Oracle_Select_Greatest N Per Group - Fatal编程技术网

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

获取SQL(oracle)中每个类别的最大值,sql,database,oracle,select,greatest-n-per-group,Sql,Database,Oracle,Select,Greatest N Per Group,假设我们有当前的科目表和该科目每个学生的分数 表:职等 Math: ANDY 80 Math: RYAN 70 Math: SARAH 95 Science: RYAN 60 Science: ANDY 90 Science: SARAH 75 我想写一个查询,以获得主题的名称,谁的分数最高,它是什么 查询的输出应如下所示: Math SARAH 95 Science ANDY 90 在oracle中,什么样的sql才能获得所需的输出?最好不使用windo

假设我们有当前的科目表和该科目每个学生的分数

表:职等

Math:    ANDY  80
Math:    RYAN  70
Math:    SARAH 95 
Science: RYAN  60
Science: ANDY  90
Science: SARAH 75
我想写一个查询,以获得主题的名称,谁的分数最高,它是什么

查询的输出应如下所示:

Math    SARAH 95
Science ANDY  90

在oracle中,什么样的sql才能获得所需的输出?最好不使用windows函数。

您可以使用分析函数
rank()


在子查询中,分析函数通过在具有相同
主题的组中降序
标记对每个记录进行排序。然后,外部查询过滤每个组的顶部记录。如果存在联系,则所有联系都会被返回(您可以使用
行编号()
来避免这种情况,或者在
order by
子句中添加另一个排序条件)。

您可以使用分析函数
rank()


在子查询中,分析函数通过在具有相同
主题的组中降序
标记对每个记录进行排序。然后,外部查询过滤每个组的顶部记录。如果存在关联,它们都会返回(您可以使用
行号()
来避免这种情况,或者在
order by
子句中添加另一个排序条件)。

在Oracle中,您可以通过聚合和
保留来执行此操作:

select subject,
       max(mark),
       max(student) keep (dense_rank first order by mark desc)
from grades
group by subject;

注意:即使有联系,每个科目也只保留一名学生。您可以使用
listag()
来获取所有这些属性。

在Oracle中,您可以通过聚合和
保留来实现这一点:

select subject,
       max(mark),
       max(student) keep (dense_rank first order by mark desc)
from grades
group by subject;

注意:即使有联系,每个科目也只保留一名学生。您可以使用
listag()
获取所有这些信息。

谢谢您抽出时间。真正地但是有没有一种不同的方法不使用windows函数呢。比如嵌套多个计数或条件?@A.Nassar:有替代方案,但可能效率较低。你为什么不想使用分析函数呢?谢谢你的时间。真正地但是有没有一种不同的方法不使用windows函数呢。比如嵌套多个计数或条件?@A.Nassar:有替代方案,但可能效率较低。你为什么不想用解析函数呢?