SQL:按包括所有 table 列的结果进行分组的有效方法

SQL: Efficient way to get group by results including all table columns

下面让我们考虑一个简单的table。

id code marks grade
1 X 100 A
2 Y 120 B
3 Z 130 A
4 X 120 C
5 Y 100 A
6 Z 110 B
7 X 150 A
8 X 140 C

目标: 获得每个年级的最高分,return 所有列。

id code marks grade
7 X 150 A
2 Y 120 B
8 X 140 C

如果我不想要 idcode 列,这很简单

select grade, max(marks)
from table
group by grade;

在上述查询中获取 idcode 列的最有效查询是什么?

我试过类似的东西,但没有用

select * from table t
inner join
(select grade, max(marks)
from table
group by grade) a
on a.grade=t.grade;

您在寻找相关子查询吗?

select t.*
from t
where t.marks = (select max(t2.marks) from t t2 where t2.grade = t.grade);

在 Postgres 中,这种查询最有效的方法是使用(专有的)distinct on ()

select distinct on (grade) *
from the_table t
order by grade, marks desc;