가중이동평균매출 lag함수 활용
2
작성한 질문수 2
안녕하세요. 강사님
강사님께서 26강 5일 가중이동평균 문제풀이 해주신 방법외에 아래와 같이 lag 함수 활용해서 문제 풀어도 현업에서 사용하기 문제 없을까요?
with temp_01 as
(select a.order_date as d_day, sum(b.amount) as sum_amount
, row_number() over(order by date(a.order_date) asc) as rnum
from nw.orders a
join nw.order_items b on a.order_id = b.order_id
where a.order_date >= date('1996-07-08')
group by a.order_date)
, temp_02 as
(
select *
, count(*) over(order by d_day rows between 4 preceding and current row) as cnt
, avg(sum_amount) over(order by d_day rows between 4 preceding and current row) as m_avg_5days #일반 이동평균 구하기
,
( lag(sum_amount,1) over(order by d_day) * 1
+ lag(sum_amount,2) over(order by d_day) * 1
+ lag(sum_amount,3) over(order by d_day) * 1
+ lag(sum_amount,4) over(order by d_day) * 0.5
+ sum_amount * 1.5 ) / 5 as w_m_avg_5days #5일 가중이동평균 구하기
from temp_01
order by d_day
)
select *
from temp_02
where rnum >= 5;
이런식으로 풀어도 괜찮을까요?
현업에서 활용할때 어떤 방식이 더 효율적일지 궁금합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. sukang73님 질문과 관련하여 아래 기존 답변을 참고해 보시면 도움이 될 것 같습니다.
관련 답변
가중이동평균
LAG() 함수를 이용해 이전 행의 매출액을 가져와 가중치를 곱하는 방식으로 가중이동평균을 계산하는 것은 현업에서도 사용할 수 있는 방법입니다. 특히 가중치가 고정된 5일 이동평균이라면 질문자님처럼 LAG(sum_amount, n)을 활용해 구현할 수 있습니다.
다만 다음 사항은 확인하는 것이 좋습니다.
LAG()의 기준은 날짜가 아니라 행(row)입니다. 따라서 특정 날짜에 데이터가 없으면 실제 달력 기준 5일이 아닌, 데이터가 존재하는 최근 5개 행을 기준으로 계산할 수 있습니다.
order_date에 시간이 포함되어 있다면 일자별 집계를 위해date(order_date)또는date_trunc('day', order_date)등을 사용해야 합니다.
- 가중치가 변경되거나 이동 기간이 길어지면
LAG()를 여러 번 작성해야 하므로 쿼리 유지보수성이 떨어질 수 있습니다.
where rnum >= 5로 초기 4개 행을 제외하는 방식은 완전한 5개 기간이 만들어진 이후부터 계산하려는 목적이라면 적절합니다. 다만rnum이 실제 날짜 순서와 일치하는지 확인해야 합니다.
- 이동평균 계산에서는 날짜가 누락될 수 있으므로, 실무에서는 날짜 캘린더 테이블을 조인하여 날짜를 보정한 뒤 계산하는 경우도 있습니다.
즉, 고정된 5일 가중이동평균을 계산하고 데이터 누락이 없다면 질문자님의 LAG() 방식도 충분히 활용할 수 있습니다. 반면 기간이나 가중치가 동적으로 바뀌거나 데이터가 매우 많다면, 가중치 테이블을 별도로 관리하거나 다른 방식으로 일반화하는 것이 유지보수와 재사용성 측면에서 더 유리할 수 있습니다.
참고로 기존 답변에서는 LAG()를 활용한 가중이동평균 방식과 SQL 및 Pandas의 활용 차이, 그리고 LAG()의 offset은 변수처럼 동적으로 지정할 수 없다는 점을 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
실습 데이터(PostgreSQL 백업 파일) 관련하여 문의드립니다. (Hive 환경 실습)
0
57
2
"주문별 고객별 연관 상품 추출 SQL로 구하기-02" 수업 질문
0
98
2
쿼리 질문있습니다!!
0
85
2
없는강의요청해도됩니까,,
0
135
2
아래와 동일한 질문에 대한 추가질문입니다
0
120
2
cnt/max로 구한 결과의 차이
0
151
2
쿼리에 대한 질문이 있습니다.
0
147
2
퍼널 질문드립니다.
0
141
1
ADSP자격증
0
326
2
특정 스키마에서 생성한 편집기의 쿼리를 판다스에 삽입하는 방법
0
181
1
백업파일 테이블 생성 오류
0
272
1
"사용자별 특정 상품 주문시 함께 가장 많이 주문된 다른 상품 추출하기"에서 조건관련..
0
195
1
Plotly을 이용해 treemap시각화시 공유사항
0
323
2
월단위 카테고리별 매출액과 주문건수 및 전체매출액 대비 비율 sql로 구하기 수업 중 질문이 있습니다.
0
274
1
with 절 질문
0
275
1
데이터 분석 SQL Fundamentals 강의 할인 문의
0
232
1
리텐션 구하는 방법 문의
0
239
1
캐글데이터 Postgresql 사용
0
388
2
mau 구할때 group by 사용안해도 count 집계함수가 왜 가능한지 모르겠습니다.
0
300
1
매출분석 1에서 partition by와 group by의 차이
0
394
1
postgres 설치 오류
0
347
1
맥 계정에서 postgres 접속 시 비밀번호 입력 실패현상
1
586
2
pandas 연계시 오류.....
0
1329
3
시각화 그래프가 안보여요
0
329
1





