Get the top row after order by in Oracle Subquery

前端 未结 4 1576
一整个雨季
一整个雨季 2021-02-15 17:19

I have a table student(id, name, department, age, score). I want to find the youngest student who has the highest(among the youngest students) score of each department. In SQL S

4条回答
  •  无人及你
    2021-02-15 18:01

    In addition to Bharat's answer, it is possible to do this using ORDER BY in the sub-query in Oracle (as point out by Jeffrey Kemp):

    SELECT *
    FROM   student s1
    WHERE  s1.id IN (SELECT id
                     FROM   (SELECT   id, ROWNUM AS rn
                             FROM     student s2
                             WHERE    s1.department = s2.department
                             ORDER BY age ASC, score DESC)
                     WHERE  rn = 1);
    

    If you use this method, you may be tempted to remove the sub-query and just use rownum = 1. This would result in the incorrect result as the sort would be applied after the criteria (you'd get 1 row that was sorted, not one row from the sorted set).

提交回复
热议问题