사용자가 일주일 또는 한 달 동안 서비스를 얼마나 쓰는지 알면 분석에 큰 도움이 된다.
이번엔 '서비스를 한 주 동안 며칠 사용하는 사용자가 몇 명인지' 집계하는 방법을 알아본다.
👆 위 데이터를 바탕으로 한 주 동안 매일 몇 명의 사용자가 방문했는지 파악하고 구성비누계도 계산한다.
한 주 동안 며칠 방문했는지 사용자 수를 집계
- 먼저 timestamp에서 날짜만 추출한다.
- 유저 별로, 일주일 동안 며칠 방문했는지 count 한다. (Where 조건과, count(distinct) 사용)
- 카운트 된 일 수(방문 일 수) 기준으로 유저 아이디 count를 한다.
👉 결과 예로, 7일 중 2일 방문한 사용자가 2명이다.
WITH
action_log_with_dt AS (
SELECT *
, substring(stamp, 1, 10) AS dt
FROM action_log
)
, action_day_count_per_user AS (
SELECT user_id
, count(DISTINCT dt) AS action_day_count
FROM action_log_with_dt
WHERE dt BETWEEN '2016-11-01' AND '2016-11-07'
GROUP BY user_id
)
SELECT action_day_count
, count(DISTINCT user_id) AS user_count
FROM action_day_count_per_user
GROUP BY 1
ORDER BY 1
;
구성비와 구성비누계 계산
WITH
action_log_with_dt AS (
SELECT *
, substring(stamp, 1, 10) AS dt
FROM action_log
)
, action_day_count_per_user AS (
SELECT user_id
, count(DISTINCT dt) AS action_day_count
FROM action_log_with_dt
WHERE dt BETWEEN '2016-11-01' AND '2016-11-07'
GROUP BY user_id
)
SELECT action_day_count
, count(DISTINCT user_id) AS user_count
-- 구성비
, 100.0 * count(DISTINCT user_id) / sum(count(DISTINCT user_id)) OVER () AS composition_ratio
-- 구성비 누계
, 100.0 * sum(count(DISTINCT user_id))
OVER (ORDER BY action_day_count ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
/ sum(count(DISTINCT user_id)) OVER () AS cumulative_ratio
FROM action_day_count_per_user
GROUP BY 1
ORDER BY 1
;
728x90
'SQL > 실무 SQL' 카테고리의 다른 글
[PostgreSQL] 6. RFM 분석으로 사용자 그룹 나누기 (1) | 2024.01.30 |
---|---|
[PostgreSQL] 5. Decile 분석을 사용해 사용자를 10단계 그룹으로 나누기 (0) | 2024.01.30 |
[PostgreSQL] 3. 연령별 특징 추출하기 (0) | 2024.01.29 |
[PostgreSQL] 2. 연령별 구분 집계 (1) | 2024.01.29 |
[PostgreSQL] 1. 사용자의 액션 수 집계 (0) | 2024.01.29 |