我在SQL的作业中遇到了一个关于从同一个表中选择具有不同类别的最大值的问题"字母"
例如:
ID Student Group Avg(value)
-------------------------------------
1 stud1 A 9
2 stud2 A 9.5
3 stud3 B 8
4 stud4 B 8.5
我的查询应该做的是显示stud2和stud4。来自各自组的最大值。
我最终成功完成了这项任务,但是它占用了很多角色,所以我认为可能还有更短的方法。有任何想法吗?我曾经首先在A组中搜索id或者具有max avg(值)的螺柱,与B中具有max avg(值)的螺柱的id相交,然后将所有东西放入一个大的选择中然后使用那些相交的ID为另一个请求显示有关这些ID的不同内容的查询。但正如我所说,它看起来太长了,并认为可能有更短的方式。
答案 0 :(得分:0)
试试这个(我将组重命名为grp并将avg重命名为avg_val,因为这些是保留关键字):
select t1.*
from your_table t1
inner join (
select grp, max(avg_val) avg_val
from your_table
group by grp
) t2 on t1.grp = t2.grp
and t1.avg_val = t2.avg_val;
它找到每组的最大平均值,并将其与原始表连接以获得相应的学生。
请注意,如果有多名学生的平均成绩与该组的最大值相同,则所有学生将被退回。