다음 SQL의 실행 결과로 옳은 것은? (등급은 가나다순으로 정렬된다)… | [SQLD] SQL 개발자 기출유형 모의고사 4회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 4회
다음 SQL의 실행 결과로 옳은 것은? (등급은 가나다순으로 정렬된다)[적립내역]
| 적립번호 | 등급 | 적립 |
|---|---|---|
| M1 | 골드 | 100 |
| M2 | 골드 | (null) |
| M3 | 골드 | 200 |
| M4 | 일반 | 60 |
| M5 | 일반 | (null) |
| M6 | 일반 | (null) |
| M7 | 실버 | (null) |
SELECT 등급,
COUNT(적립) AS C,
AVG(적립) AS A1,
SUM(적립) / COUNT(*) AS A2
FROM 적립내역
GROUP BY 등급
ORDER BY 등급;1
| 등급 | C | A1 | A2 |
|---|---|---|---|
| 골드 | 2 | 150 | 150 |
| 실버 | 0 | (null) | (null) |
| 일반 | 1 | 60 | 60 |
2
| 등급 | C | A1 | A2 |
|---|---|---|---|
| 골드 | 2 | 100 | 100 |
| 실버 | 0 | (null) | (null) |
| 일반 | 1 | 20 | 20 |
3
| 등급 | C | A1 | A2 |
|---|---|---|---|
| 골드 | 2 | 150 | 100 |
| 실버 | (null) | (null) | (null) |
| 일반 | 1 | 60 | 20 |
4
| 등급 | C | A1 | A2 |
|---|---|---|---|
| 골드 | 2 | 150 | 100 |
| 실버 | 0 | (null) | (null) |
| 일반 | 1 | 60 | 20 |
해설
AVG(적립)은 NULL 을 뺀 값만 평균해 골드 150, 일반 60 이지만, SUM(적립)/COUNT(*)는 NULL 행까지 분모에 넣어 골드 100, 일반 20 이 된다.
값이 모두 NULL 인 실버는 COUNT(적립)이 0, SUM 이 NULL 이라 나눗셈 결과도 NULL 이다.
- 실버의 C 를 NULL 로 본 표는 COUNT 가 0 을 돌려준다는 점을 놓쳤다.
- 골드 평균을 100 으로 본 표는 AVG 가 NULL 을 0 으로 센다고 오해했다.
- A2 를 A1 과 같게 본 표는 COUNT(*)가 NULL 행도 센다는 점을 놓쳤다.
오류나 개정된 내용이 보이면 알려주세요