отображение верхних 2 значений (или нижних 2) в oracle

Текущий код у меня находит среднее и показывает все 4. Я пытаюсь обрезать его, чтобы показать только информацию для топ-2 с самым высоким средним . Текущий код у меня есть ниже.

SELECT BRANCHSUBURB, AVG(SESSIONPRICE)
FROM BRANCH NATURAL JOIN SESSIONS 
GROUP BY BRANCHSUBURB
ORDER BY AVG(SESSIONPRICE) ASC;

Я хотел бы показать только нижние 2 значения(которые будут самыми высокими)
Или, если это будет проще, показать верхние 2 значения(и Сортировать по убыванию)

Введите описание изображения здесь

1 ответ

  1. В Oracle можно использовать вложенный запрос:

    SELECT *
    FROM (SELECT BRANCHSUBURB, AVG(SESSIONPRICE)
          FROM BRANCH NATURAL JOIN SESSIONS 
          GROUP BY BRANCHSUBURB
          ORDER BY AVG(SESSIONPRICE) ASC
         ) x
    WHERE rownum <= 2;
    

    В Oracle 12c+ можно использовать стандартные функции ANSI, поэтому вложенный запрос не требуется:

    SELECT BRANCHSUBURB, AVG(SESSIONPRICE)
    FROM BRANCH NATURAL JOIN SESSIONS 
    GROUP BY BRANCHSUBURB
    ORDER BY AVG(SESSIONPRICE) ASC
    FETCH FIRST 2 ROWS ONLY;