Oprócz tego, że używasz przestarzałej składni niejawnych przecinków dla złączeń, łączysz także kolumny tabel w niewłaściwy sposób w podzapytaniu.
subject_name
to kolumna subject
co nie ma nic wspólnego ze stosunkiem ucznia do ocen. Tak więc ocenę można łączyć osobno z przedmiotem przy ustalaniu identyfikatorów studenta z najwyższą oceną. Następnie możemy uzyskać imię i nazwisko ucznia, korzystając z tych identyfikatorów student_id
Tak więc w Oracle 12c i nowszych możesz to zrobić
SELECT s.student_name
FROM student s
WHERE s.student_id IN ( SELECT m.student_id
FROM mark m JOIN subject su
ON su.subject_id = m.subject_id
WHERE lower(su.subject_name) = 'software engineering'
ORDER BY m.value DESC
FETCH FIRST 1 ROWS WITH TIES ) order by 1;
W przypadku poprzednich wersji możesz użyć dense_rank
lub rank
SELECT s.student_name
FROM student s
WHERE s.student_id IN ( SELECT student_id
FROM ( SELECT m.*,DENSE_RANK() OVER(
ORDER BY m.value DESC
) AS rnk
FROM mark m JOIN subject su
ON su.subject_id = m.subject_id
WHERE lower(su.subject_name) = 'software engineering'
) WHERE rnk = 1
) order by 1;