데이터베이스 기초
사원 표(이름, 부서, 급여)에 8개 행이 있고, 부서별 급여는 영업이 320, 280, 350, 개발이 400, 310, 총무가 260, 300, 기획이 330이다. SELECT 부서, COUNT(*) FROM 사원 WHERE 급여 >= 300 GROUP BY 부서 HAVING COUNT(*) >= 2의 결과는 몇 행이 되는가?
- A2행
- B3행
- C4행
정답과 해설 보기
정답: A. 2행
먼저 WHERE로 급여가 300 이상인 행만 남깁니다. 영업은 320과 350의 2행, 개발은 400과 310의 2행, 총무는 300의 1행, 기획은 330의 1행이 남고, 영업의 280과 총무의 260은 제외됩니다. 다음으로 GROUP BY로 부서별로 묶으면 4개 그룹이 되며, 각각의 행 수는 영업 2, 개발 2, 총무 1, 기획 1입니다. 마지막으로 HAVING COUNT(*) >= 2로 행 수가 2 이상인 그룹만 남기므로 영업과 개발의 2행이 결과가 됩니다. WHERE를 붙이지 않고 세면 영업 3, 개발 2, 총무 2, 기획 1이 되어 HAVING을 만족하는 것은 3행입니다. WHERE는 그룹화 전, HAVING은 그룹화 후에 작용한다는 순서가 결과를 좌우합니다.