다음 SQL 의 실행 결과로 옳은 것은?[일별출고]창고출고일자수량A20… | [SQLD] SQL 개발자 기출유형 모의고사 8회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 8회
다음 SQL 의 실행 결과로 옳은 것은?[일별출고]
| 창고 | 출고일자 | 수량 |
|---|---|---|
| A | 2026-03-01 | 10 |
| A | 2026-03-02 | 20 |
| A | 2026-03-03 | 30 |
| A | 2026-03-04 | 40 |
| B | 2026-03-01 | 5 |
| B | 2026-03-02 | 15 |
SELECT 창고, 출고일자,
SUM(수량) OVER (PARTITION BY 창고
ORDER BY 출고일자
ROWS BETWEEN 1 PRECEDING
AND 1 FOLLOWING) AS 이동합
FROM 일별출고
ORDER BY 창고, 출고일자;1
| 창고 | 출고일자 | 이동합 |
|---|---|---|
| A | 2026-03-01 | 30 |
| A | 2026-03-02 | 60 |
| A | 2026-03-03 | 90 |
| A | 2026-03-04 | 70 |
| B | 2026-03-01 | 20 |
| B | 2026-03-02 | 20 |
2
| 창고 | 출고일자 | 이동합 |
|---|---|---|
| A | 2026-03-01 | (null) |
| A | 2026-03-02 | 60 |
| A | 2026-03-03 | 90 |
| A | 2026-03-04 | (null) |
| B | 2026-03-01 | (null) |
| B | 2026-03-02 | (null) |
3
| 창고 | 출고일자 | 이동합 |
|---|---|---|
| A | 2026-03-01 | 10 |
| A | 2026-03-02 | 30 |
| A | 2026-03-03 | 50 |
| A | 2026-03-04 | 70 |
| B | 2026-03-01 | 5 |
| B | 2026-03-02 | 20 |
4
| 창고 | 출고일자 | 이동합 |
|---|---|---|
| A | 2026-03-01 | 10 |
| A | 2026-03-02 | 30 |
| A | 2026-03-03 | 60 |
| A | 2026-03-04 | 100 |
| B | 2026-03-01 | 5 |
| B | 2026-03-02 | 20 |
해설
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING 은 파티션 안에서 앞 행·현재 행·뒤 행을 합하며, 앞이나 뒤 행이 없으면 있는 행만 합산한다.
A 의 첫날은 10+20=30, 둘째 날 60, 셋째 날 90, 마지막 날 30+40=70 이고 B 는 두 행뿐이라 두 날 모두 5+15=20 이다.
- 10·30·50·70 결과는 1 PRECEDING AND CURRENT ROW 프레임이다.
- 경계 행이 NULL 인 결과는 프레임이 모자라면 NULL 이 된다고 본 경우이다.
- 10·30·60·100 결과는 처음부터 현재 행까지의 누적합이다.
오류나 개정된 내용이 보이면 알려주세요