다음 SQL 의 실행 결과로 옳은 것은? (정렬 시 NULL 은 마지막… | [SQLD] SQL 개발자 기출유형 모의고사 4회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 4회
다음 SQL 의 실행 결과로 옳은 것은? (정렬 시 NULL 은 마지막에 온다)[예약]
| 예약번호 | 편명 |
|---|---|
| 1 | KE101 |
| 2 | KE101 |
| 3 | LJ007 |
| 4 | KE101 |
| 5 | OZ330 |
| 6 | LJ007 |
| 7 | (null) |
SELECT 편명, COUNT(*) AS 예약수,
COUNT(*) OVER () AS 편수
FROM 예약
GROUP BY 편명
ORDER BY 편명;1
| 편명 | 예약수 | 편수 |
|---|---|---|
| KE101 | 3 | 4 |
| LJ007 | 2 | 4 |
| OZ330 | 1 | 4 |
| (null) | 1 | 4 |
2
| 편명 | 예약수 | 편수 |
|---|---|---|
| KE101 | 3 | 7 |
| LJ007 | 2 | 7 |
| OZ330 | 1 | 7 |
| (null) | 1 | 7 |
3
| 편명 | 예약수 | 편수 |
|---|---|---|
| KE101 | 3 | 3 |
| LJ007 | 2 | 3 |
| OZ330 | 1 | 3 |
| (null) | 1 | 3 |
4
| 편명 | 예약수 | 편수 |
|---|---|---|
| KE101 | 3 | 3 |
| LJ007 | 2 | 3 |
| OZ330 | 1 | 3 |
해설
논리 처리 순서상 GROUP BY 가 먼저 끝나 편명별 4행(NULL 편명 그룹 포함)이 되고, 윈도우 함수는 이 그룹화된 4행 위에서 COUNT(*) OVER () 를 계산해 모든 행에 4를 준다.
예약수는 각 그룹의 원래 행 수이고, 편명이 NULL 인 7번도 하나의 그룹이 되어 마지막 행으로 나온다.
- 편수를 7로 둔 표는 윈도우 함수가 그룹화 전 원본 행을 센다고 본 것이다.
- 세 행만 있는 표는 GROUP BY 가 NULL 그룹을 버린다고 본 것이다.
- NULL 행은 있지만 편수가 3인 표는 NULL 그룹을 세지 않는다고 오해한 결과이다.
오류나 개정된 내용이 보이면 알려주세요