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

#sql #oracle #greatest-n-per-group

#sql #Oracle #наибольшее число на группу

Вопрос:

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

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

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

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

Ответ №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;
  

Комментарии:

1. Спасибо за ваше время, первое решение, которое вы опубликовали, работает отлично :).