누적 사용자 통계 SQL 쿼리|월별·연도별 집계 방법 MySQL vs Oracle

누적 사용자 통계는 서비스를 파악하는 핵심 지표입니다. 월별·연도별 집계를 통해 사용자 증가 패턴을 분석하고, 비즈니스 전략 수립에 활용됩니다. 이번 글에서는 MySQL과 Oracle에서 누적 사용자 수를 집계하는 SQL 쿼리 예제를 비교해 소개합니다.

누적 사용자 통계 리포트란?

  • 정의 : 특정 기간별로 누적된 사용자 수를 집계하는 리포트
  • 활용 사례 : 마케팅 성과 측정, 사용자 성장 추이 분석, 투자 지표 작성
  • 예를 들어 구글 서치 콘솔에서 노출 수, 클릭 수, 키워드 분석으로 앞으로 포스팅 주제를 정하는 데 도움이 됩니다.

누적 집계 시 주의할 점

  • 정확한 집계를 위해 중복 사용자를 제거하여 순수한 데이터만으로 집계해야 합니다.
  • 전체 데이터를 처리하면 서버에 부하가 발생할 수 있으니, 데이터 기간을 필터링하여 최근 데이터만 집계하는 것이 좋습니다.
  • 월별 vs 연도별 비교의 차이

MySQL 예제 쿼리

-- 월별 누적 사용자 수
SELECT DATE_FORMAT(created_at, '%Y-%m') AS month,
       COUNT(DISTINCT user_id) AS monthly_users,
       SUM(COUNT(DISTINCT user_id)) OVER (ORDER BY DATE_FORMAT(created_at, '%Y-%m')) AS cumulative_users
FROM user_log
WHERE created_at >= '2024-01-01'
GROUP BY DATE_FORMAT(created_at, '%Y-%m');

-- 연도별 누적 사용자 수
SELECT YEAR(created_at) AS year,
       COUNT(DISTINCT user_id) AS yearly_users,
       SUM(COUNT(DISTINCT user_id)) OVER (ORDER BY YEAR(created_at)) AS cumulative_users
FROM user_log
GROUP BY YEAR(created_at);
SQL

Oracle 예제 쿼리

-- 월별 누적 사용자 수
SELECT TO_CHAR(created_at, 'YYYY-MM') AS month,
       COUNT(DISTINCT user_id) AS monthly_users,
       SUM(COUNT(DISTINCT user_id)) OVER (ORDER BY TO_CHAR(created_at, 'YYYY-MM')) AS cumulative_users
FROM user_log
WHERE created_at >= DATE '2024-01-01'
GROUP BY TO_CHAR(created_at, 'YYYY-MM');

-- 연도별 누적 사용자 수
SELECT TO_CHAR(created_at, 'YYYY') AS year,
       COUNT(DISTINCT user_id) AS yearly_users,
       SUM(COUNT(DISTINCT user_id)) OVER (ORDER BY TO_CHAR(created_at, 'YYYY')) AS cumulative_users
FROM user_log
GROUP BY TO_CHAR(created_at, 'YYYY');
SQL

추가 팁

  • 시각화 : 누적 수치를 차트로 그리면 성장 추세가 한눈에 보임
  • 필터링 : 특정 국가, 채널, 캠페인별 누적 분석도 가능
  • 인덱스 최적화 : 특정 칼럼(created_at, user_id)에 인덱스 생성

마무리

지금까지 누적 사용자 통계 SQL 쿼리를 MySQL과 Oracle 예제와 함께 살펴보았습니다. 소개한 예제 쿼리는 기본적인 형태로, 데이터 분석과 리포트 작성의 기초 자료로 활용됩니다. 다음 시간에는 최근 7일 및 30일 기준 통계 쿼리에 대해 자세히 알아보겠습니다.

관련 포스팅들

위로 스크롤