[코딩테스트]/[SQL]
[StrataScratch - SQL] (Medium) Users By Average Session Time
잰잰'
2025. 5. 5. 13:03
문제
각 사용자의 평균 세션 시간을 계산하십시오. 세션은 page_load와 page_exit 사이의 시간 차이로 정의됩니다. 각 사용자는 하루에 하나의 세션만 있다고 가정합니다. 동일한 날에 여러 개의 page_load 또는 page_exit 이벤트가 있는 경우, 최신 page_load와 가장 이른 page_exit만 사용하되, page_load가 page_exit보다 먼저 발생해야 합니다. user_id와 그들의 평균 세션 시간을 출력하십시오.
테이블설명
예상결과
✏️ 풀이
WITH session_duration AS (
SELECT user_id, timestamp, action,
IF(action = 'page_load', @last_load := timestamp, NULL) AS load_time,
IF(action = 'page_exit' AND @user_id = user_id AND @last_load IS NOT NULL, TIMESTAMPDIFF(SECOND, @last_load, timestamp), NULL) AS session_duration,
@user_id := user_id
FROM facebook_web_log
ORDER BY user_id, timestamp
), filter_session AS (
SELECT *
FROM session_duration
WHERE session_duration IS NOT NULL
)
SELECT user_id, AVG(session_duration) AS avg_session_duration
FROM filter_session
GROUP BY 1;
1. @last_load에 가장 최근 마지막 load time 저장
2. 'page_exit' action에서 user_id가 같은지 확인하고 @last_load의 값이 있는지 확인
3. 2번을 만족하면 page_load의 timestamp와 page_exit의 timestamp의 차이를 구함
4. 3번이 없는 값은 필터
5. 4번 데이터에서 평균 구하기
easy에서 medium으로 넘어오니 난이도가 꽤 많이 상승한 것 같다