2012-03-14 2 views
0

O сообщество, вы знаете, как я мог выбрать department_ID и самую низкую зарплату отдела с самой высокой средней зарплатой? Или как устранить the'ORA-00934: функция группы не разрешена здесь? Должен ли я использовать два подзапроса?ORA-00934: функция группы здесь не допускается || Выбор МИН (Зарплата) самого высокооплачиваемого департамента

До сих пор, это то, что я придумал, пытаясь получить department_id из самых высокооплачиваемых отдела:

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

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

+0

http://psoug.org/reference/group_by.html – Aprillion

+0

@deathApril: Спасибо, закладкой. –

ответ

0

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

;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 
+0

Я знаю, что вы упомянули, что вы не можете проверить проблему, но решение не сработало. Returned: Ошибка в строке 10: ORA-00904: «AVGSALARY»: неверный идентификатор. –

+1

@TylerJFisher - Вы правы. Я обновил свой ответ, дайте мне знать, если это помогает – Lamak

+0

Oracle нуждается в символе завершения оператора (';') в конце *, а не в начале инструкции. –

0

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

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
  • Основной запрос возвращал мин зарплаты для department_id с самой высокой средней заработной платы
+0

Ваше первое решение просто берет сотрудника с максимальной зарплатой, а не отдел с максимальной средней зарплатой всех. Ваш второй запрос не выбирает отдел с максимальной зарплатой, просто берет каждый отдел и рассчитывает максимальную зарплату каждого – Lamak

+0

. Я забыл о «самой высокой средней зарплате». Теперь второй запрос возвращает правильный результат. Если вы положите 'select a, max (b) из c' без 'group by', запрос возвращает только одну строку. Я удалил первый запрос из-за этого фрагмента: FROM employees WHERE pay = (SELECT MAX (avg_dataSet.avg_salary) – Matusz

Смежные вопросы