월별 신규 사용자 가입 수 및 누계

문제

보고를 위해 사용자가 가입한 수를 유용한 날짜 범위 간격(빈)으로 그룹화하여 파악해야 합니다.

또한 동일한 날짜 빈 기준의 사용자 총수도 알아야 합니다.

해결 방법

다음 쿼리는 user.created_at 컬럼을 연-월 문자열로 변환하고 해당 월 “빈” 내의 사용자 수를 집계하는 공통 테이블 표현(CTE)을 생성하여 동작합니다.

이후 윈도우 연산(OVER)을 사용하여 count의 누적 합을 생성합니다.

WITH data as (
    SELECT 
        TO_CHAR(u.created_at,'yyyy-MM') AS yeardate, 
        COUNT(*) 
    FROM users u
    GROUP BY yeardate 
    ORDER BY yeardate
)
SELECT 
    yeardate,
    count,
    SUM(count::int) OVER (
        order by yeardate asc rows between unbounded preceding and current row
    ) AS cumulative
FROM data

OVER 구문은 SO(스택 오버플로우)에서 복사한 것이므로, 모든 옵션이 엄격히 필요한지 알 수 없습니다.

yeardate의 포맷을 변경하여 날짜 빈의 크기를 쉽게 조정할 수 있습니다.

이 주제에서 비슷한 것들을 몇 가지 찾아볼 수 있습니다. 테스트해 보고 비교해 보고 싶으시다면 아래 링크를 확인해 보세요:

오, 좋네요! 감사합니다.

내가 검색을 했다고 생각했는데, 분명히 충분히 하지 못했거나 비밀 레시피가 부족했던 것 같아요.

그랬으면 시간을 좀 아낄 수 있었는데… 한숨