Как решить функцию группы ошибок не допускается - PullRequest
2 голосов
/ 02 июля 2019

Есть две таблицы:

  • сотрудник (emp_id, emp_name, salary, dept_id) и
  • отдел (dept_id, dept_name).

Запрос состоит в том, чтобы найти название отдела с максимальным количеством сотрудников. Запрос, который я придумал, это

select dept_name from department
where dept_id = (select dept_id from (select dept_id,count(dept_id) numbers 
                 from employee group by dept_id)
                 where numbers = max(numbers));

Отображаемая ошибка:

ORA-00934: групповая функция здесь запрещена

Пожалуйста, пролите немного света, я пробовал это более двух дней.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Одно решение - заказать, а после этого взять только первую запись ...

вот так:

select * from
(
  select d.dept_name, count(e.id) 
  from department d, employee e
  where e.dept_id = d.dept_id
  group by d.dept_name
  order by count(e.id) desc
)
where rownum = 1;
1 голос
/ 02 июля 2019

Вы пытаетесь использовать результат подзапроса дважды . Чтобы (повторно) использовать его несколько раз, вам нужно поместить его в CTE (Common Table Expression). Как только вы это сделаете, запрос станет проще.

Например, вы можете перефразировать ваш запрос как:

with
x as (
  select dept_id,count(dept_id) as numbers from employee group by dept_id
),
y as (
  select dept_id from x where numbers = (select max(numbers) from x)
)
select dept_name 
from department d
join y on y.dept_id = d.dept_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...