문제 및 정답 링크
- 처음 접속한 날의 다음 날에도 접속한 유저의 비율을 반환하는 문제.
📌Solution
SELECT ROUND(COUNT(a3.player_id)
/ (SELECT COUNT(DISTINCT a2.player_id) from Activity a2),2) AS fraction
from Activity a3
WHERE (a3.player_id, DATE_SUB(a3.event_date, INTERVAL 1 DAY)) IN (SELECT a1.player_id, MIN(a1.event_date) from Activity a1 GROUP BY a1.player_id)
📌Point
- 이틀 연속이 아니라 처음 접속한 날 기준이라는 것이 중요. 헷갈리면 안됨!
DATE_SUB
, DATE_ADD
함수 용법을 이해하고, 서브쿼리(또는 JOIN으로 풀수도 있을듯)로 첫날(player 별 DATE의 최솟값)과 (date-1day) 로 다시 집계한 테이블과의 교집합을 보는 것이 핵심.
JOIN으로도 풀어볼까
- 했지만 CTE라는 투머치 개념인 것 같아 다음에 TODO로 남겨둠.