본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] Leet code - Game Play Analysis IV

by kime2 2024. 7. 17.
출처

 

문제

처음 로그인한 날의 다음 날에 다시 로그인한 플레이어의 비율을 소수점 이하 2자리로 반올림하여 보고하는 솔루션을 작성합니다. 즉, 첫 번째 로그인 날짜부터 최소 2일 연속으로 로그인한 플레이어 수를 계산한 다음 해당 숫자를 총 플레이어 수로 나눠야 합니다.
결과 형식은 다음 예제와 같습니다.

문제에 대한 해석

 

 

첫 번째 로그인 날짜부터 최소 2일 연속 방문한 Id =  3월 1일, 3월2일에 연속으로 방문한 id 1

풀이(MYSQL)

-- 아이디별 첫번째 방문한 날짜 계산
with first as (
    select player_id, min(event_date) as 'event_date'
    from Activity 
    group by player_id
)
select round(count(distinct a.player_id)/(select count(distinct c.player_id) from Activity c),2) as 'fraction'
from first a, Activity b
where a.player_id = b.player_id
and date_add(a.event_date,INTERVAL 1 DAY) = b.event_date
 
  1. WHERE 절:
    where a.player_id = b.player_id
    and date_add(a.event_date,INTERVAL 1 DAY) = b.event_date

각 아이디가 동일하고

첫번째 로그인한 날짜에서 1일을 더했을때 날짜가 Activity테이블에 있는 경우 필터링

즉, 다음날 연속적으로 방문했을때를 계산하기 위함

 

이전 동일한 테이블에서 연속적인 숫자 계산을 할때와 유사

[문제풀이] Leet code - Consecutive Numbers (tistory.com)

주의

1. date_add를 사용하지 않고 +1을 해주면 월이 바뀌는 날은 반영되지 않는다

배운점