출처
문제
처음 로그인한 날의 다음 날에 다시 로그인한 플레이어의 비율을 소수점 이하 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
- WHERE 절:
where a.player_id = b.player_idand date_add(a.event_date,INTERVAL 1 DAY) = b.event_date
각 아이디가 동일하고
첫번째 로그인한 날짜에서 1일을 더했을때 날짜가 Activity테이블에 있는 경우 필터링
즉, 다음날 연속적으로 방문했을때를 계산하기 위함
이전 동일한 테이블에서 연속적인 숫자 계산을 할때와 유사
[문제풀이] Leet code - Consecutive Numbers (tistory.com)
주의
1. date_add를 사용하지 않고 +1을 해주면 월이 바뀌는 날은 반영되지 않는다
배운점
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] Leet code - Employee Bonus (0) | 2024.07.19 |
---|---|
[문제풀이] Leet code - Investments in 2016 (0) | 2024.07.19 |
[문제풀이] Leet code - Department Highest Salary (0) | 2024.07.16 |
[문제풀이] Leet code - duplicate-emails (0) | 2024.07.15 |
[문제풀이] Leet code - Consecutive Numbers (0) | 2024.07.15 |