Получить верхнюю строку после заказа в Oracle Subquery

У меня есть ученик за столом (имя, фамилия, отдел, возраст, оценка). Я хочу найти самого молодого студента, который имеет самый высокий (среди самых молодых студентов) балл на каждом факультете. В SQL Server я могу использовать следующий SQL.

select * from student s1 
where s1.id in 
(select s2.id from student s2 
where s2.department = s1.department order by age asc, score desc top 1).

Однако в Oracle вы не можете использовать предложение order by в подзапросе, и здесь нет ключевого слова limit / top like. Я должен соединить таблицу учеников с собой два раза, чтобы запросить результат. В оракуле я использую следующий SQL.

select s1.* from student s1, 
(select s2.department, s2.age, max(s2.score) as max_score from student s2, 
(select s3.department, min(s3.age) as min_age from student s3 group by s3.department) tmp1 where 
s2.department = tmp1.department and s2.age = tmp1.min_age group by s2.department, s2.age) tmp2 
where s1.department =tmp2.department and s1.age = tmp2.age and s1.score=tmp2.max_score

Кто-нибудь есть идеи, чтобы упростить вышеупомянутый SQL для оракула.

Ответы на вопрос(4)

Ваш ответ на вопрос