프로덕트 매니저/PM의 데이터

sum over, 일별 진척율 대비 YoY 구하기 (1) (sum over의 개념 등)

KmkmKim 2022. 12. 28. 11:59

휴가 중 문의를 받았다.

 

2022년 12월의 일별 누적거래액 차트를 만들고 싶어요.
아 물론 2021년 12월 1일부터 동기간 YoY를 비교하는 형태가 가능하면 좋을 것 같아요.

 

문과로 태어난 나의 정체성을 유지하고 싶었지만, 엔지니어의 기운이 스며든 것인지 기존에 시도하지 않았던 요청이 오면 게임하는 것만큼 흥미로운 것 같다. 요청 내용을 처리해보자.

 


일별 진척율을 왜 보고 있을까

우선 이런 것을 왜 구하는지 먼저 살펴보자. 비즈니스 분석팀은 매번 월말 기준 예측치를 산출한다.

 

이번달 예측치는 140점으로 예상 YoY는 40%가 나올 것 같아요.

 

이후 분석팀은 비즈니스 지표를 모니터링하게 된다. 물론 찐 엔지니어 성격의 데이터 분석팀은 이를 하지 않는 것 같다. 우리처럼 전략기획팀 한 스푼 묻은 데이터분석 조직이나, 혹은 사업부에서 주로 진행한다.

 

여튼 이렇게 모니터링을 하다보면, 전년도 이맘때와 비교할 때 예상보다 더 잘나오는 경우도 있고, 못나오는 경우도 있다. 예를 들어 [2021/12/01~2021/12/13]의 거래액과 [2022/12/01~2022/12/13]을 비교했을 때 YoY가 초기 예측한 40%에 근접하지 않고 초과하거나 미달하는 경우가 발생할 수 있다. 그런 경우, 어떤 것이 이슈인지 발견하기 위해서 이런 일별 진척율을 함께 확인하게 된다.

 

 


 

누적을 보고싶다면 SUM OVER

 

SQL을 공부하면서 계속 놀란다. 뭔가 사람이 이렇게 할 수 있는게 있지 않을까 생각하는 것들은 대부분 기능이 있다.

SQL에서는 SUM OVER라는 함수를 제공한다. RANK처럼 OVER을 제공하는 것인데, 원리는 간단하다.

  • 무엇을 계속해서 더할거니
  • 어떤 순서로 누적해서 더할거니

이 2개만 지정해주면 된다. 예를 들어서 살펴보겠다.

 

SELECT
	regist_day, -- 거래발생일
	total, -- (일단위)거래액
	sum(total) OVER(ORDER BY regist_day ASC) --거래액 누적
FROM
	gmv_data

 

우선 무엇을 계속 더할거니에 대해서 우리는 일별 거래액을 더할 것이기 때문에, sum 바로 뒤의 괄호 안에 total이라는 칼럼을 지정하게 된다. 그런 다음 각 행별로 기준에 따라 수치를 구할 때 사용하는 OVER를 사용한다. 이 뒤에는 우리가 일별 진척율에 따라 계산할 것이기 때문에 등록된 날짜로 정렬한다는 의미의 ORDER BY regist_day ASC를 입력한다.