#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. Спасибо за ваше время, первое решение, которое вы опубликовали, работает отлично :).