--16. 각 부서별로 직원이 한명만 있는 부서만 조회하시오. -- 단, 직원이 없는 부서에 대해서는 ‘<신생부서>’ 라는 문자열이 출력되도록 하라. select max(d.department_name),nvl(count(e.employee_id),0) from employees e, departments d where e.department_id (+)= d.department_id group by d.department_id having count(*)=1 order by 1 desc;
select nvl(max(d.department_name),'<신생부서>') from employees e, departments d where e.department_id = d.department_id (+) group by d.department_id having count(*) = 1 order by 1 desc nulls last;
아래 스키마를 기반으로, 비슷하지만 다른 쿼리문을 작성해보았습니다.
실제 정답은 첫 번째 쿼리문이 맞겠죠?
1. 우선 문제에 모순이 있네요.
- 직원이 1명인 부서만 출력한다면? 신생부서는 출력되면 안되죠.
- 둘다 출력해야 한다면? 1명 이하인 부서를 출력하라는 문제가 되어야 합니다.
2. COUNT 는 NVL 필요 없습니다.
- 건수가 없으면 0 건이 출력됨
3. 문제에 정렬에 대한 언급은 없네요?
- 정렬은 왜 하셨죠?
4. 출력항목에 대한 언급도 없네요.
- 어떤 항목들이 출력되어야 할지?
- <신생부서> 를 어떻게 표현해야 할지가 모호하네요.
SELECT d.department_id , d.department_name , COUNT(e.department_id) cnt , DECODE(COUNT(e.department_id), 0, '<신생부서>') bigo FROM employees e , departments d WHERE e.department_id(+) = d.department_id GROUP BY d.department_id, d.department_name HAVING COUNT(e.department_id) <= 1 ;