Oracle 기준으로 다음 SQL을 실행한 결과로 옳은 것은?[수강]학… | [SQLD] SQL 개발자 기출유형 모의고사 1회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 1회
Oracle 기준으로 다음 SQL을 실행한 결과로 옳은 것은?[수강]
| 학번 | 강의코드 | 점수 |
|---|---|---|
| 101 | DB | 80 |
| 102 | DB | (null) |
| 103 | DB | 100 |
| 101 | OS | (null) |
| 104 | OS | (null) |
| 105 | (null) | 70 |
SELECT 강의코드, COUNT(*) AS 인원, COUNT(점수) AS 응시,
SUM(점수) AS 합계, AVG(점수) AS 평균
FROM 수강
GROUP BY 강의코드
ORDER BY 강의코드;1
| 강의코드 | 인원 | 응시 | 합계 | 평균 |
|---|---|---|---|---|
| DB | 3 | 2 | 180 | 90 |
| OS | 2 | 0 | (null) | (null) |
| (null) | 1 | 1 | 70 | 70 |
2
| 강의코드 | 인원 | 응시 | 합계 | 평균 |
|---|---|---|---|---|
| DB | 3 | 2 | 180 | 60 |
| OS | 2 | 0 | (null) | (null) |
| (null) | 1 | 1 | 70 | 70 |
3
| 강의코드 | 인원 | 응시 | 합계 | 평균 |
|---|---|---|---|---|
| DB | 3 | 2 | 180 | 90 |
| OS | 2 | 0 | (null) | (null) |
4
| 강의코드 | 인원 | 응시 | 합계 | 평균 |
|---|---|---|---|---|
| DB | 3 | 2 | 180 | 90 |
| OS | 2 | 0 | 0 | 0 |
| (null) | 1 | 1 | 70 | 70 |
해설
집계 함수는 NULL을 제외하므로 DB의 평균은 180/2=90이고, 점수가 모두 NULL인 OS는 COUNT(점수)가 0, SUM·AVG가 NULL이다.
그룹 기준 열의 NULL도 하나의 그룹이 되어 강의코드가 NULL인 행이 따로 나오고, Oracle 오름차순에서는 맨 뒤에 정렬된다.
- DB 평균을 60으로 둔 표는 NULL을 0으로 보고 3으로 나눴다.
- OS의 합계·평균을 0으로 둔 표는 값이 없는 SUM을 0으로 착각했다.
- NULL 그룹을 뺀 표는 GROUP BY가 NULL 키도 묶는다는 점을 놓쳤다.
오류나 개정된 내용이 보이면 알려주세요