[count(칼럼값), count(*) 비교] 질문 있습니다. 0 2 645

by 부산광어 [2020.05.19 14:36:40]


1.PNG (91,016Bytes)

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

아래 스키마를 기반으로, 비슷하지만 다른 쿼리문을 작성해보았습니다.

실제 정답은 첫 번째 쿼리문이 맞겠죠?

by 마농 [2020.05.19 14:52:03]

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
;

 


by 부산광어 [2020.05.19 16:39:32]

감사합니다.. 질문 자체가 이상했었네요

덕분에 항상 배우고 갑니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입