다음 SQL의 실행 결과로 옳은 것은?[직원]직원번호기본급수당13005… | [SQLD] SQL 개발자 기출유형 모의고사 3회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 3회
다음 SQL의 실행 결과로 옳은 것은?[직원]
| 직원번호 | 기본급 | 수당 |
|---|---|---|
| 1 | 300 | 50 |
| 2 | 250 | (null) |
| 3 | 280 | 30 |
| 4 | (null) | 40 |
| 5 | 320 | 0 |
SELECT SUM(기본급 + 수당) AS S1,
SUM(기본급) + SUM(수당) AS S2,
COUNT(기본급 + 수당) AS CNT
FROM 직원;1
| S1 | S2 | CNT |
|---|---|---|
| 980 | 980 | 3 |
2
| S1 | S2 | CNT |
|---|---|---|
| 1270 | 1270 | 5 |
3
| S1 | S2 | CNT |
|---|---|---|
| 980 | 1270 | 3 |
4
| S1 | S2 | CNT |
|---|---|---|
| 980 | 1270 | 5 |
해설
기본급 + 수당은 행마다 먼저 계산되어 어느 한쪽이 NULL 인 직원번호 2·4 는 NULL이 되고, 집계 함수는 이 NULL 을 빼고 계산해 S1=350+310+320=980, CNT=3 이다.
반면 S2 는 열별로 NULL 을 제외해 먼저 합한 뒤 더하므로 1150+120=1270이 된다.
- NULL 을 0 으로 보면 S1 이 1270, CNT 가 5 가 되지만 실제와 다르다.
- COUNT(식)은 식이 NULL 인 행을 세지 않아 5 가 아니다.
- S2 는 열마다 따로 합하므로 S1 과 같은 980 이 아니다.
오류나 개정된 내용이 보이면 알려주세요