문제
다음은 [영업사원] 테이블과 [부서별실적] 테이블이다. 다음 SQL문의 실행 결과로 올바른 것은?
[영업사원]
| 사원명 | 소속부서 |
|---|---|
| SMITH | 영업1팀 |
| ALLEN | 영업2팀 |
| WARD | 영업1팀 |
| MARTIN | 영업2팀 |
[부서별실적]
| 실적부서 | 달성액 |
|---|---|
| 영업1팀 | 3000 |
| 영업1팀 | 5000 |
| 영업2팀 | 1000 |
| 영업2팀 | 2000 |
① SMITH, WARD ② ALLEN, MARTIN ③ SMITH, ALLEN, WARD, MARTIN ④ 반환되는 행 없음
정답
1번
해설
정답: 1. WITH 절 DeptPerf는 부서별 평균 달성액을 구한다. 영업1팀 = AVG(3000, 5000) = 4000, 영업2팀 = AVG(1000, 2000) = 1500이다. WHERE 평균달성액 > 3000 조건으로 영업1팀(4000)만 통과하고, 영업1팀 소속 사원은 SMITH와 WARD이다.
오답 풀이
- ①: 정답.
- ②: ALLEN·MARTIN은 영업2팀이고 평균 1500으로 조건(>3000)에 미달한다.
- ③: 두 팀 모두가 아니라 조건을 만족하는 영업1팀만 남는다.
- ④: 영업1팀이 조건을 만족하므로 결과가 존재한다.
보충 개념 WITH(공통 테이블 표현식)는 인라인 뷰처럼 집계 결과를 임시 이름으로 만들어 메인쿼리에서 재사용한다. 부서로 조인한 뒤 집계값에 대한 필터는 WHERE로 가능하다(여기서는 이미 인라인 뷰로 집계가 끝났기 때문).