#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
. Это работает. Спасибо.