다음 SQL 의 실행 결과로 옳은 것은?[청구]청구번호계약번호청구금액1… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 10회
다음 SQL 의 실행 결과로 옳은 것은?[청구]
| 청구번호 | 계약번호 | 청구금액 |
|---|---|---|
| 1 | 201 | 50 |
| 2 | 201 | 80 |
| 3 | 202 | 60 |
| 4 | 202 | 60 |
| 5 | 203 | 90 |
| 6 | 204 | (null) |
| 7 | 204 | 40 |
SELECT 청구번호, 계약번호, 청구금액
FROM 청구 A
WHERE 청구금액 = (SELECT MAX(청구금액)
FROM 청구 B
WHERE B.계약번호 = A.계약번호)
ORDER BY 청구번호;1
| 청구번호 | 계약번호 | 청구금액 |
|---|---|---|
| 2 | 201 | 80 |
| 3 | 202 | 60 |
| 5 | 203 | 90 |
| 7 | 204 | 40 |
2
| 청구번호 | 계약번호 | 청구금액 |
|---|---|---|
| 2 | 201 | 80 |
| 3 | 202 | 60 |
| 4 | 202 | 60 |
| 5 | 203 | 90 |
3
| 청구번호 | 계약번호 | 청구금액 |
|---|---|---|
| 2 | 201 | 80 |
| 3 | 202 | 60 |
| 4 | 202 | 60 |
| 5 | 203 | 90 |
| 7 | 204 | 40 |
4
| 청구번호 | 계약번호 | 청구금액 |
|---|---|---|
| 2 | 201 | 80 |
| 3 | 202 | 60 |
| 4 | 202 | 60 |
| 5 | 203 | 90 |
| 6 | 204 | (null) |
| 7 | 204 | 40 |
해설
연관 서브쿼리는 바깥 행 A 의 계약번호를 받아 같은 계약 안의 MAX(청구금액)을 매번 다시 구하므로, 계약마다 최대 금액과 같은 청구가 모두 남는다.
202는 60이 두 건이라 두 건 모두 남고, 204는 MAX 가 NULL 을 무시해 40이 최대가 되며 금액이 NULL 인 청구 6은 = 비교가 UNKNOWN 이라 빠진다.
- 202에서 한 건만 남긴 표는 동점을 하나로 줄인 것으로, = 비교는 같은 값을 모두 통과시킨다.
- 204가 빠진 표는 NULL 이 섞이면 MAX 가 NULL 이 된다고 본 오해이다.
- 청구 6을 넣은 표는 NULL 금액도 최댓값 비교를 통과한다고 본 것이다.
오류나 개정된 내용이 보이면 알려주세요