#oracle
Вопрос:
Когда я пытаюсь это сделать без отображения department_id, это работает нормально, как :
SQL> SELECT MAX(AVG(SALARY)) FROM EMPLOYEE GROUP BY DEPARTMENT_ID;
MAX(AVG(SALARY))
----------------
800000
Но когда я тоже хочу отобразить department_id, это приводит к следующей ошибке:
SQL> SELECT DEPARTMENT_ID, MAX(AVG(SALARY)) FROM EMPLOYEE GROUP BY DEPARTMENT_ID;
SELECT DEPARTMENT_ID, MAX(AVG(SALARY)) FROM EMPLOYEE GROUP BY DEPARTMENT_ID
*
ERROR at line 1:
ORA-00937: not a single-group group function
Есть ли этому какое-то объяснение? Что я делаю не так? Я просмотрел ответы на предыдущие подобные вопросы и попробовал их решения, но получил ту же или какую-то другую ошибку. Любая помощь будет признательна.
Ответ №1:
Я предлагаю вам использовать
SELECT department_id, avg_salary
FROM ( SELECT DEPARTMENT_ID,
AVG (SALARY) avg_salary,
RANK () OVER (ORDER BY AVG (salary) DESC) rnk
FROM EMPLOYEE
GROUP BY DEPARTMENT_ID)
WHERE rnk = 1;
т.е.
- используйте свой первый запрос в качестве «источника»
- кроме того, ранжируйте средние зарплаты в порядке убывания (с помощью
rank
аналитической функции)
- кроме того, ранжируйте средние зарплаты в порядке убывания (с помощью
- выберите строку, которая занимает самое высокое место