出力の一部として規律が必要な場合は、サブセレクトを使用するよりも次のほうがわずかに高速になる可能性があります (テーブルを 1 回スキャンするだけでよいため) が、おそらく大きなテーブルの場合にのみ表示されます。
select student,
discipline,
mark as lowest_mark
from (
select student,
discipline,
mark,
row_number() over (partition by student order by mark) as rn
from the_table
) t
where rn = 1
生徒ごとに常に 1 つの行が返されます。同じマークの分野が 2 つある場合、どちらが取られるかは定義されていません。
最低のマークが複数回発生した場合に複数の行を返したい場合は、これを使用できます。
select student,
discipline,
mark as lowest_mark
from (
select student,
discipline,
mark,
min(mark) over (partition by student) as min_mark
from the_table
) t
where mark = min_mark
規律が必要ではなく、最低点だけが必要な場合は、GavinCattell の最初のステートメントが最適です。