1. MAU 정의
MAU (Monthly Active Users)
한달 동안 서비스를 이용한 순수 이용자 수
- Monthly: 기준이 되는 한 달(보통 1일~말일) 동안.
- Active: 단순히 가입된 상태가 아니라, 앱 실행, 로그인, 클릭 등 '활동'을 한 유저.
- Users: 중복을 제거한(Unique) 실제 사람 수. 한 사람이 100번 방문해도 MAU는 1로 집계됩니다.
주의사항
MAU를 구할 때 할 수 있는 실수는 DISTINCT를 빼먹는 것
- 오답: SELECT COUNT(user_id) FROM Logs (중복 방문이 다 카운트되어 숫자가 뻥튀기됨.)
- 정답: SELECT COUNT(DISTINCT user_id) FROM Logs (한 달 동안의 '순수' 유저 수만 추출.)
2. MAU와 함께 세트로 외워야 할 놈들
| 지표 | 풀네임 | 의미 | 비고 |
| DAU | Daily Active Users | 하루 동안의 순수 이용자 수 | 게임, SNS 등 매일 쓰는 앱에서 중요 |
| WAU | Weekly Active Users | 일주일 동안의 순수 이용자 수 | 주간 단위 리듬 확인 |
| Stickiness | 고착도 | DAU / MAU | 유저가 우리 서비스에 얼마나 '중독'됐나 측정 |
3. 예상 문제
- 이 MAU 중에 **신규(New)**는 몇 명인가?
- 지난달에 이어 이번 달에도 온 **유지(Retained)**는 몇 명인가?
- 한동안 안 오다 다시 온 **복귀(Reactivated)**는 몇 명인가?
4. 가상 문제
[문제] 월별 유저 활동 타입 분석
UserLogs 테이블에는 유저의 활동 기록이 담겨 있습니다. 이 데이터를 바탕으로 매달 서비스를 이용한 유저(MAU)를 다음 두 가지 타입으로 분류하여 월별 유저 수를 산출하는 SQL 쿼리를 작성하십시오.
- Retained (유지): 이번 달에 방문했고, 바로 직전 달에도 방문 기록이 있는 유저.
New/Reactivated (신규 및 복귀): 이번 달에 방문했으나, 바로 직전 달에는 방문 기록이 없는 유저.- 출력 컬럼: visit_month (연-월-01 형태), user_type (타입 명칭), user_count (유저 수)
- 정렬: visit_month 기준 오름차순.
WITH MonthlyVisit AS ( # 1단계: 유저별 월별 방문 여부 집계 SELECT DISTINCT user_id, DATE_FORMAT(event_timestamp, '%Y-%m-01') AS visit_month FROM UserLogs ), UserStatus AS ( # 2단계: 이번 달 방문자와 지난 달 방문자를 비교 SELECT cur.visit_month, cur.user_id, CASE WHEN prev.user_id IS NULL THEN 'New/Reactivated' -- 지난달 이력 없음 ELSE 'Retained' -- 지난달에도 옴 END AS user_type FROM MonthlyVisit cur LEFT JOIN MonthlyVisit prev ON cur.user_id = prev.user_id AND cur.visit_month = DATE_ADD(prev.visit_month, INTERVAL 1 MONTH) ) # 3단계: 최종 MAU 및 타입별 비중 산출 SELECT visit_month, user_type, COUNT(DISTINCT user_id) AS user_count FROM UserStatus GROUP BY visit_month, user_type ORDER BY visit_month;
5. 코드 분석
- LEFT JOIN을쓰는 이유: 저번 달에 안 온 사람(신규/복귀)도 이번 달 MAU에는 포함되어야 하기 때문
- UserStatus 절
| 유저 ID | cur.visit_month (이번달) |
prev.visit_month (저번달) |
DATE_ADD 결과 | 결과 |
| A | 2026-02-01 | 2026-01-01 | 2026-02-01 | 매칭 성공 (Retained) |
| B | 2026-02-01 | (기록 없음) | NULL | 매칭 실패 (New/Reactivated) |
'Data Science > SQL' 카테고리의 다른 글
| T사 SQL 쿼리테스트 대비3: 퍼널 분석 (Funnel Analysis) (0) | 2026.02.05 |
|---|---|
| T사 SQL 쿼리테스트 대비2: A/B테스트 (0) | 2026.02.05 |
| [SQL/오답] 3회 연속 등장하는 숫자 찾기: LEAD vs 삼중 Self Join (LeetCode180 Medium) (0) | 2026.02.05 |
| [SQL/함수] N번째 높은 급여 찾기: 사용자 정의 함수 CREATE FUNCTION와 OFFSET (LeetCode177 Medium) (1) | 2026.02.04 |
| C사 Business Analyst SQL 쿼리테스트 학습 목표 (0) | 2026.02.04 |