Эта часть требует модификации:
and c.value in (
select max(a.value)
from mark a, subject d
where a.subject_id = d.subject_id and d.subject_name='Software Engineering')
Вам нужно взять только Инженер-программист строк из таблицы mark
, поэтому, пожалуйста, напишите:
and (c.subject_id, c.value)
in (select subject_id, max(a.value)
from mark a
join subject d using (subject_id)
where d.subject_name = 'Software Engineering'
group by subject_id)
демо
Вы можете сделать это также с помощью аналькальных функций (row_number, max), но я хотел остаться рядом с вашим решением, котороеты знаешь.