Освен факта, че използвате остарял скрит синтаксис със запетая за обединения, вие също така комбинирате колони от таблиците по грешен начин в подзаявката.
subject_name
е колона от subject
което няма нищо общо с отношението на ученика към оценките. Така че оценката може да бъде съединена отделно с предмет, докато се определят student_ids с най-висока оценка. След това можем да получим името на ученика, използвайки тези student_ids
И така, в Oracle 12c и по-нови можете да направите
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;
За предишни версии можете да използвате dense_rank
или 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;