다음 테이블과 SQL문을 보고 실행 결과를 쓰시오.
[A]
[B]
SELECT COUNT(*)
FROM A
WHERE A.x > (
SELECT AVG(B.y)
FROM B
WHERE B.id IN (
SELECT A2.id
FROM A AS A2
WHERE A2.x < A.x
)
);| id | x |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
| 4 | 40 |
| id | y |
|---|---|
| 1 | 5 |
| 1 | 15 |
| 2 | 20 |
| 3 | 35 |
| 5 | 50 |
모범답안
3
풀이와 판단 근거
이 쿼리는 바깥쪽 A의 행을 하나씩 보면서 현재 A.x보다 작은 A2.id를 다시 찾고, 그 id와 일치하는 B.y의 평균을 계산한다. 그러므로 바깥쪽 A.x가 바뀔 때마다 안쪽 쿼리의 결과도 달라진다.
x=10일 때는 평균이 NULL이라 비교 결과가 참이 되지 않는다. x=20, 30, 40인 세 행만 조건을 만족하므로 COUNT(*)의 계산 결과는 3이다.
자주 틀리는 지점
- 연산자 우선순위나 재귀 반환 순서를 생략하고 눈에 보이는 값만 바로 계산함
- 값 전달·참조 전달, 오버라이딩·오버로딩 또는 배열과 포인터의 차이를 혼동함
- 출력의 공백·줄바꿈·대소문자를 무시해 3와 다른 형식으로 작성함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.