ORA-00934: Групповая функция здесь запрещена || Выбор MIN (Зарплата) самого высокооплачиваемого отдела - PullRequest
0 голосов
/ 14 марта 2012

O сообщество, вы знаете, как я мог выбрать департамент_ID и самую низкую зарплату отдела с самой высокой средней зарплатой? Или как исключить 'ORA-00934: групповая функция здесь не разрешена' вопрос? Нужно ли использовать два подзапроса?

Пока что это то, что я придумал, пытаясь получить Department_ID наиболее высокооплачиваемого отдела:

SELECT department_ID, MIN(salary
FROM employees
WHERE department_ID = (SELECT department_ID
    FROM employees WHERE salary = MAX(salary));

Спасибо, ваша помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Вы можете использовать объединение (тогда у вас есть только один подзапрос)

select e1.department_ID, min(e1.salary)
from employees e1
join (
    select avg_query.department_ID, max(avg_query.avg_value) 
    from (
        select department_ID, avg(salary) as avg_value
        from employees
        group by department_ID
    ) avg_query
) e2 on e2.department_ID = e1.department_ID
;
  • Первый подзапрос вернул среднюю зарплату для всех отделов
  • Следующий подзапрос на основе первого подзапроса вернул самое высокое среднее зарплата и связанные с ней отдел_ID
  • Основной запрос вернул минимальную зарплату для отдела_ид с ​​наибольшим средним зарплата
0 голосов
/ 14 марта 2012

Я не могу проверить это, но оно должно работать:

;WITH DepartmentsSalary AS
(
    SELECT department_ID, AVG(Salary) AvgSalary, MIN(Salary) MinSalary
    FROM employees
    GROUP BY department_ID
)
SELECT department_ID, MinSalary
FROM (  SELECT department_ID, AvgSalary, MAX(AvgSalary) OVER() MaxSalary, MinSalary
        FROM DepartmentsSalary) D
WHERE MaxSalary = AvgSalary
...