문제
다음 [성적] 테이블에서 SQL문을 실행했을 때, 이름이 '박'인 행의 moving_avg 값을 쓰시오. (소수점 첫째자리까지)
| 이름 | 과목 | 점수 |
|---|---|---|
| 김 | 수학 | 80 |
| 이 | 수학 | 90 |
| 박 | 수학 | 70 |
| 최 | 영어 | 85 |
| 정 | 영어 | 75 |
SQLSELECT 이름, AVG(점수) OVER (PARTITION BY 과목 ORDER BY 점수 ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS moving_avg FROM 성적;
정답
70.0
70.070
해설
- PARTITION BY 과목으로 수학과 영어로 분할됩니다.
- ORDER BY 점수로 각 파티션 내에서 점수 오름차순 정렬합니다.
- 수학 파티션에서 정렬 순서: 박(70), 김(80), 이(90)
- ROWS BETWEEN 1 PRECEDING AND CURRENT ROW는 현재 행과 바로 이전 행을 포함한 범위를 의미합니다.
- 박(70)은 수학 파티션에서 첫 번째 행이므로 이전 행이 없습니다.
- 따라서 현재 행(박, 70점)만으로 평균을 계산: 70/1 = 70.0