Если вам нужна дисциплина как часть выходного документа, следующее может быть немного быстрее, чем при использовании подвыборки (поскольку требуется только одно сканирование по таблице), но оно, вероятно, будет отображаться только для больших таблиц.
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
Он всегда будет возвращать ровно одну строку на одного учащегося. Если есть две дисциплины с одинаковой меткой, не определено, какой из них будет сделан.
Если вы хотите вернуть несколько строк, если самая низкая отметка встречается более чем один раз, вы можете использовать это:
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 первый заявление - путь.