Как показать количество из другой таблицы?

#oracle

#Oracle

Вопрос:

Я новичок в Oracle.

Теперь я хочу показать количество сотрудников, работающих в каждом отделе,

и количество сотрудников в каждом отделе должно быть меньше 2.

Но я показываю только department_id и department_name

Я не знаю, как показать count .

 SELECT d.DEPARTMENT_ID, d.DEPARTMENT_NAME
FROM DEPARTMENTS d
WHERE 2 > (SELECT COUNT(e.EMPLOYEE_ID)
           FROM EMPLOYEES e
           WHERE d.DEPARTMENT_ID = e.DEPARTMENT_ID);
  

Мой вывод:

 DEPARTMENT_ID | DEPARTMENT_NAME 
...           | ...   
  

Правильный вывод:

 DEPARTMENT_ID | DEPARTMENT_NAME |  COUNT(EMPLOYYE_ID) |
...           | ...             |  ...                |
  

Комментарии:

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

2. @Sujitmohanty30 Упс, я ошибся, оно меньше. Нижний вывод правильный

Ответ №1:

попробуйте это (добавлено исправление для обработки обращений отделов без сотрудников)

 SELECT d.DEPARTMENT_ID, d.DEPARTMENT_NAME, NVL(e2.cnt,0) count
FROM DEPARTMENTS d
LEFT JOIN (select e.department_id, count(*) cnt from employees e group by e.department_id) e2
  ON d.department_id=e2.department_id 
where e2.cnt <2
  

Или, более компактный

 SELECT d.DEPARTMENT_ID, d.DEPARTMENT_NAME, count(e2.employee_id)
FROM DEPARTMENTS d
LEFT JOIN employees e ON d.department_id=e.department_id 
GROUP BY d.DEPARTMENT_ID, d.DEPARTMENT_NAME 
HAVING COUNT(*) <2
  

Комментарии:

1. Этот код не показывает, что если в отделе никого нет

2. d.id не работает. Если я перейду с d.id=e2.department_id на d.department_id=e2.department_id . Это работает. Спасибо.