SQL 6

[SQL/Clickhouse] 시계열 데이터 지수index로 변환하기

오늘은 물가지수, 주가지수와 같은 지수로 변환하는 법이다. 아이디어는 간단하다. 시계열 순으로 가장 최초의 값을 가져오고, 그 값을 모든 행에 나눠서 지수로 표현하는 방법이다. 거래액 등 단위 자체가 다른 2개의 지표에 대해서, 시작점을 100으로 놓고 어떤게 더 성장했는지 비교할 때 유용하다. 예를 들면, 통계청에서 발표한 이커머스 거래 현황과 작고 소중한 우리 회사 거래액을 비교한다고 가정해보자. 시장지배력이 높은 기업이라도 아마 단위 자체가 다를 가능성이 높다. 이럴 때 시장의 성장에 비해 우리의 성장이 잘 이뤄지고 있는지 등을 볼 때, 지수로 변환해서 확인하면 유용하다. 우선 코드는 아래와 같다. SELECT stat_date, round(company_gmv/sum(company_gmv_r1)o..

프로그래머스 SQL 코딩테스트 후기

(주의) 기출 문제 정보는 없습니다. 그냥 처음 보면서 느낀점들, 이후에 볼 때 주의할 사항들에 대해 적었습니다. 준비과정 우선 첫번째로 프로그래머스 내 제공해주는 기출문제를 풀어봤다. 기출문제를 풀었던 것은 문법간 차이를 미리 이해하기 위함이었다. 이전 회사는 Google Bigquery 기반의 SQL을 활용했고, 지금 회사는 Clickhouse 기반의 SQL을 활용했다. Bigquery에서 Clickhouse로 넘어올 때, 굵직한 문법은 비슷했지만 간혹 조금씩 차이가 있는 경우가 있었다. 그런 경험 때문에 시험 때 응시할 MYSQL이 지금 회사의 문법과 차이가 있을 것을 우려해서 프로그래머스에서 제공하는 문제를 미리 풀어봤다. 결과적으로 매우 잘한 일이었다. 프로그래머스에서 제공하는 연습문제를 풀자마..

잡상들 2023.02.18

[clickhouse] neighbor 활용하여 이전행/다음행 가져오기

이탈 분석을 하다보면, 사용자들이 이탈 직전에 어떤 액션을 했는지, 또는 어떤 퍼널에서 이탈했는지 확인이 필요하다. 다만, 하나의 테이블에 유저의 모든 액션이 순서대로 집계된 경우 특정 사용자의 직전 액션만 모으는 것이 난해하다. 이렇게 저장되는 경우, 우리가 뽑아내고 싶은 내용은 kazuha는 1달무료이용까지만 이용하고 회원탈퇴를 했다는 점, 그리고 sakura는 정기결제1개월까지 이용하고 회원탈퇴를 했다는 점이다. 아마 아래와 같이 데이터를 뽑아야 할 것이다. 이런 경우, SQL에서는 이전의 행(Row)을 가져올 수 있는 lag, lead라는 함수를 제공한다. 그리고 우리처럼 Clickhouse를 사용하는 경우에는 neighbor을 활용할 수 있다. 우선 neighbor에 대한 기능을 소개해본다. n..

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

휴가 중 문의를 받았다. 2022년 12월의 일별 누적거래액 차트를 만들고 싶어요. 아 물론 2021년 12월 1일부터 동기간 YoY를 비교하는 형태가 가능하면 좋을 것 같아요. 문과로 태어난 나의 정체성을 유지하고 싶었지만, 엔지니어의 기운이 스며든 것인지 기존에 시도하지 않았던 요청이 오면 게임하는 것만큼 흥미로운 것 같다. 요청 내용을 처리해보자. 일별 진척율을 왜 보고 있을까 우선 이런 것을 왜 구하는지 먼저 살펴보자. 비즈니스 분석팀은 매번 월말 기준 예측치를 산출한다. 이번달 예측치는 140점으로 예상 YoY는 40%가 나올 것 같아요. 이후 분석팀은 비즈니스 지표를 모니터링하게 된다. 물론 찐 엔지니어 성격의 데이터 분석팀은 이를 하지 않는 것 같다. 우리처럼 전략기획팀 한 스푼 묻은 데이터..

[SQL/Clickhouse] LIMIT n BY, 그룹별/조건별로 필요한 수만큼 추출하기

조건에 따른 상위랭커를 뽑아보려면 처음에 SQL을 배우면 가장 먼저 배우는 것 중 하나가 LIMIT문이다. 그래서 처음에 RANK와 같은 순위 함수를 모르더라도, '거래액 순으로 상위 10개를 뽑아주세요'라는 요청을 받으면 어렵지 않게 출력할 수 있을 것이다. 다만, 가끔 전체가 아닌 그룹별로 뽑아야하는 경우가 발생할 수 있다. "우리 고객사들을 카테고리별로 거래액 상위 10개 몰을 추출해주세요." 이런 경우, 초보인 경우는 WHERE에다가 카테고리 이름을 하나씩 쓰면서, 발품을 파는 경우가 많다. (어떻게 확신하듯 작성하냐면, 내가 맨 처음에 그랬던 것 같다.) 그렇다면 어떻게 해야할까? 나중에 쿼리를 공부하면서 알게 된 방법은 크게 2가지가 있다. 하나는 RANK를 활용하는 것이고, 또 하나는 LIM..

SQL을 활용한 코호트 분석Cohort Analysis

SQL을 활용한 Cohort 분석 방법에 대해 정리한 글입니다. Cohort 분석이란? Cohort 분석은 흔히 '동질집단분석'으로 알려져 있습니다. 특정 기간에 같은 특성이나 경험을 공유하는 그룹을 나누어 분석하는 행동 분석 방법의 하나입니다. 쿠팡에서 발표한 Cohort 자료를 예로 들어보겠습니다. 2019년에 가입한 고객들의 거래액은 가입한 2019년과 비교할 때 2020년에 2.19배로 증가했습니다. 2019년에 100만원어치 구매를 한 고객들이 2020년에 219만원어치 구매를 했다고 볼 수 있습니다. 쿠팡에 대한 신뢰도가 높아지면서 객단가가 높은 상품을 구매했거나, 또는 다른 채널에서 구매하던 상품도 쿠팡을 통해서 구매하는 등 긍정적인 변화가 있음을 알 수 있습니다. 또한 거래액이 2배, 3배..