다음 테이블과 SQL문을 보고 출력값을 쓰시오.
SELECT COUNT(*)
FROM employee AS e
JOIN project AS p ON e.project_id = p.project_id
WHERE p.name IN (
SELECT name
FROM project
WHERE project_id IN (
SELECT project_id
FROM employee
GROUP BY project_id
HAVING COUNT(*) < 2
)
);| employee_id | name | project_id |
|---|---|---|
| 1 | Alice | 10 |
| 2 | Bob | 10 |
| 3 | Charlie | 20 |
| 4 | Dana | 30 |
| 5 | Ethan | 30 |
| project_id | name |
|---|---|
| 10 | Alpha |
| 20 | Beta |
| 30 | Gamma |
모범답안
1
풀이와 판단 근거
가장 안쪽 GROUP BY는 프로젝트별 직원 수를 10번=2명, 20번=1명, 30번=2명으로 센다. HAVING COUNT(*)<2를 만족하는 project_id는 20뿐이다.
중간 쿼리가 이름 Beta를 반환하고, 바깥 JOIN에서 Beta 프로젝트 소속 직원은 Charlie 한 명이므로 COUNT(*)는 1이다.
자주 틀리는 지점
- HAVING COUNT(*)<2를 직원별 조건으로 적용함
- project_id가 아니라 프로젝트 이름 Beta를 직원 테이블과 직접 비교함
- 두 명인 10·30 프로젝트도 ‘2 이하’로 잘못 포함함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.