데이터 분석 28일차
네이버 블로그의 게시글 데이터를 분석하여 3일 이동 평균(rolling average)을 계산하세요.
각 사용자의 블로그 게시글 수에 대한 3일 이동 평균을 계산하여 user_id, post_date, rolling_avg_3d 값을 출력하는 SQL 쿼리를 작성하세요.
결과는 소수점 둘째 자리까지 반올림하여 출력하세요.
결과는 고객 ID, 게시글 작성 날짜 기준으로 오름차 정렬하세요.
🔍 설명
with add_row_num as(select *, row_number() over(partition by user_id order by post_date desc) row_num
from blog_posts
)
select *,
avg(post_count) over(PARTITION BY user_id ORDER BY user_id, post_date desc ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) avg_post_cnt
from add_row_num
뜻: 현재 행을 기준으로 이전 2행부터 현재 행까지를 포함한 범위를 설정
사용 위치: OVER (...) 구문 안
📌 구성
| 키워드 | 의미 |
|---|---|
| ROWS | 행 단위 범위 지정 (지정된 순서 기준) |
| 2 PRECEDING | 현재 행의 바로 앞에서 두 번째 행까지 포함 |
| CURRENT ROW | 현재 행 포함 |
🧪 예시 (ORDER BY 기준)
| row_num | 값 | 계산 대상 (2 PRECEDING ~ CURRENT) |
|---|---|---|
| 1 | 10 | [10] |
| 2 | 20 | [10, 20] |
| 3 | 30 | [10, 20, 30] |
| 4 | 40 | [20, 30, 40] |
| 5 | 50 | [30, 40, 50] |
📝 요약 문장
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW는 윈도우 함수에서 이전 2개 행과 현재 행을 포함하는 범위로 평균, 합계 등 집계함수를 계산할 때 사용된다.