분류 전체보기

    [sql] user session diff

    서비스를 활성화 시키기위해 신규 유저를 유입시키는것은 중요하다. 그리고 신규 유저가 유입했다면 유저의 첫방문 이후 두번째 방문, 세번째 방문을 만들어내는것이 필요하다. 더불어 방문간의 시간차를 줄일수 있다면 더욱 좋겠다. 이런 맥락에서 우리는 이번시간에 유저의 첫 방문(session)에서 두번째 방문까지 걸린 시간을 구해보고자 한다. 순서는 아래와 같이 진행한다. ① 각 세션 발생 순서대로 넘버링 부여 ② 두번째 세션이 존재하는 유저만 필터후, 유저별 두번째 세션과 첫번쨰 세션의 시간차 집계 ③ 시간 차이에 대한 분포 테이블 생성 ① 먼저, 유저의 첫 방문(session)에서 두번째 방문까지 걸린 시간을 계산하기 위해서는 유저별 세션 발생 순서를 구분해줘야하고, 두번째 세션을 만든 유저만 필터링해야한다...

    [sql] DAU3

    이전시간에는 for문과 변수를 이용해서 90일치의 dau, wau, mau 지표를 계산하는 방법을 알아봤다. 이 방법은 시간이 오래걸린다는 단점이 있었다. for문을 이용해서 90일치의 각 지표를 모두 구하려면 총 270번의 쿼리가 필요했었기 때문이다. 그래서 이번시간에는 이 단점을 극복하고자 cross join을 이용해보고자한다. 순서는 아래와같이 진행한다. ① 일자 테이블 생성 ② 생성한 일자테이블과 session 데이터 cross join 해서 dau, wau, mau 임시 테이블 생성 ③ 생성된 세 지표테이블 join ① 먼저 일자 테이블을 하나 생성한다. postgres에서는 generate_series라는 함수를 사용해서 시작일과 종료일을 기입해주면 일자 배열형태의 칼럼을 쉽게 만들수 있다. ..

    [sql] recursive CTE2

    https://indistract.tistory.com/70 [sql] recursive CTE 놀랍게도 sql에서는 변수를 지정할수도 있고 재귀적인 쿼리를 작성할 수 있다. 쿼리내에서 지정한 변수를 참조해서 어떤 조건에 도달할때까지 반복적인 loop를 형성하는 것이 가능하다. 이를 이 indistract.tistory.com 위 포스팅에서는 recursive cte를 이용해서 시간 테이블을 만드는 방법을 알아봤었다. 이번에는 recursive cte를 이용해 일자 테이블을 만드는 방법을 알아본다. 테이블을 만드는 원리는 위 포스팅과 동일하며, 아래와 같은 테이블을 만드는 것이 목적이다 ("2023-03-31" 일자까지 출력). 포스팅 내용을 복기해보면, 아래와 같이 재귀 CTE를 사용했었다. ① wit..

    [sql] DAU2

    이전 포스팅에서는 DAU를 정적으로 구하는 방법을 알아보았고, 이번에는 DAU를 동적으로 구하는 방법을 알아본다. DAU를 동적으로 계산하는 방법은 아래 2가지가 있었는데, 이번 포스팅에서는반복문과 변수를 활용하는 방법에 대해서 쓰겠다 ① 반복문과 변수를 활용해서 insert into ② cross join 목적은 90일치 각각의 DAU, WAU, MAU 를 계산해서 테이블화 하는 것이다. 각 지표들은 각 기준날짜로부터 계산된 DAU, WAU, MAU 이어야한다. 각 일자마다 세 지표가 다르게 계산되어야 하는 것이다. 이는 아래 4단계를 거쳐 완성해보도록 한다. ① 테이블 생성 ② 변수선언 ③ for loop 생성 ④ transaction 처리 ① 먼저 일자와 각 지표들을 담을 테이블은 만들어준다. 테이..

    [sql] DAU1

    DAU(Daily Active Users) 하루동안 방문한 순수 사용자를 의미한다. 이는 기본적이면서 중요한 메트릭이다. 예를들어, 신규게임을 출시했을때 얼마나 많은 사용자가 하루에 들어왔는지는 중요하다. 게임을 출시하고나서 DAU의 증감률에 따라서 전략을 분석하고, 어떤 마케팅 액션을 취할것인지 의사결정하곤 한다. sql에서도 ga session 데이터를 활용해서 DAU를 구해볼수 있다. 쿼리는 아래와 같이 간단하며 주의할점은 한가지다. session 테이블에서 user id를 헤아리면 중복되는 경우가 존재하기때문에, 고유 user id 값을 카운트해줘야한다. 하나의 유저가 여러개의 세션을 남길수 있기 때문이다. select to_char(date_trunc('day', visit_stime), 'yy..

    [서평] 놀라움의 힘

    "세상에는 두 종류의 연구가 있다. 하나는 우리가 가진 상식을 확인시켜주는 연구고, 다른 하나는 틀린 연구다." - 작자미상 우리 인간은 모두 편향을가지고 살아간다. 그리고 그 편향은 좀처럼 쉽게 변하지 않는다. 기존 생각의 반대되는 견해를 접하게되면 편향이 줄어들 것이라 생각할 수 있지만 그렇지 않다. 오히려 새로운 정보는 기존 견해를 역으로 강화한다. 한 연구에서는 강한 정치적 신념을 지닌 실험 참가자에게 반론을 제시하거나 그의 정치적 신념이 틀릴수 있다는 증거를 제시했을때, 신체적 위협에 대응할때와 동일한 뇌 영역이 활성화 된다는 사실을 발겼했다. 자신의 믿음에 반대되는 상황을 마주했을때 사람은 자동으로 투쟁-도피 반응을보이며, 기존의 견해를 지켜내는 것이다. 이런 편향이 특히 부정적으로 작용하는 ..

    [서평] 의학의 대가들

    이책은 모두 실화로 구성되어있으나 소설보다 흥미롭다. 책에서는 우리가 지금 당연히 누리고 있는 의학기술들이 어떻게 탄생할수 있는지에 대한 이야기를 들려준다. 발전은 발작처럼 일어나고, 때로는 후퇴하기도 한다. 의학의 역사를 들여다보노라면 핵폭탄이나 세계대전보다 인류에 더 큰 영향을 미친 중대한 발견이 숨막히는 위험이나 평범한 관찰 또는 우연한 오류라는 찰나의 순간에 달려있었음을 알 수 있다. 이 책은 그 순간에 관한 이야기다. - 서문, p.11 책을 읽다보면 의학적 발전이 결코 점진적으로 이루어진 성과가 아님을 알 수 있다. 의학적 발전은 갑자기 어느 순간 갑자기 발작처럼 찾아온다. 한번의 우연한 발견, 한번의 실수가 엄청난 혁신의 씨앗을 심기도 한다. 저자는 심장병, 당뇨, 세균성 감염, 바이러스성 ..

    [서평] 인간관계론

    '사람에 대한 관심' 이 책을 읽으면서 내가 삶에서 가장 크게 놓쳐왔던 부분이 '사람에 대한 관심' 이었음을 깨달았다. 나는 그동안 '나'의 능력과 '나'의 안녕, 그리고 '나'의 관심사에만 초점을 두고 살아왔다. 개인의 성장이 삶을 풍성하게 해주는 모든것이라 생각했기 때문이다. 인간관계론을 읽으며 이가 틀렸음을 머지않아 알게 되었다. '개인'으로 성장하고 행복해지는것은 명확한 한계가 존재한다. 진사회적 동물인 인간은 사람간의 관계속에서 더 성장하고, 더 큰 성과를 이루고, 그리고 더 행복하다. 책에서는 더 나은 관계를 만들어 가는방법과 더 좋은 평판을 얻는 비결, 그리고 다른 사람을 쉽게 설득하는 지름길을 다양한 예시로 소개한다. 한장씩 읽어나가면서 내가 얼마나 책의 조언의 반대로 살아왔는지 알게되어 ..