StrataScratch - Users By Average Session Time
platform.stratascratch.com
문제이해
- 유저별 평균 session time을 계산하기
- session 정의 : action 컬럼의 page_load 이벤트와 page_exit 이벤트 사이
- 한 세션 內 page_load 이벤트나 page_exit 이벤트가 2개 이상인 경우
- page_load : 가장 최근의 page_load 기준
- page_exit : 가장 빠른 page_exit 기준
- 유저당 최대 1일 1세션 (편의상)
- 한 세션 內 page_load 이벤트나 page_exit 이벤트가 2개 이상인 경우
접근방법
- user_id - 날짜 조합을 unique key로 page_load와, page_exit의 timestamp를 각각 계산
- 위에서 계산된 timestamp를 이용하여 session time 계산
- session time = page_exit - page_load
- user_id 기준으로 session time의 평균을 계산
풀이코드
-- latest page_load 계산
WITH load AS(
SELECT
user_id,
DATE(timestamp) AS date,
MAX(timestamp) AS latest_loadtime
FROM facebook_web_log
WHERE action = 'page_load'
GROUP BY user_id, DATE(timestamp)
),
-- latest page_exit 계산
exit AS(
SELECT
user_id,
DATE(timestamp) AS date,
MIN(timestamp) AS earliest_exittime
FROM facebook_web_log
WHERE action = 'page_exit'
GROUP BY user_id, DATE(timestamp)
)
-- session time 계산 후 user_id별 평균 계산
SELECT
user_id,
AVG((e.earliest_exittime - l.latest_loadtime)) AS session_time
FROM load AS l
LEFT JOIN exit AS e
USING (user_id, date)
GROUP BY user_id
HAVING AVG((e.earliest_exittime - l.latest_loadtime)) IS NOT NULL
;
'SQL문제풀이 > StrataScratch' 카테고리의 다른 글
[SQL풀이][StrataScratch][hard] Premium vs Freemium (0) | 2024.04.22 |
---|