본문 바로가기

데이터 분석/SQL

[MYSQL] 550. Game Play Analysis IV / WITH절 임시 테이블

 

Table :

- 기본키 : player_id, event_date

- 이 테이블은 플레이어들의 게임플레이 기록을 뜻함

- 각 행은 플레이어가 로그인한 기록이며 games_played는 게임을 플레이한 개수가 적혀져 있음(0일 수도)

 

ex)


 

>> 문제

=> 로그인한 첫날로부터 최소 이틀 연속 접속한 이들의 비율을 구하시오

 

=> 문제 해석 주의점

: 2틀 연속인 경우가 하루라도 있는 사람을 출력하는 것이 아님

: 로그인한 첫날로부터 2틀연속 접속한 사람을 출력하는 것

 

ex)

player1 player2
1-7 1-7
1-8 1-9
6-25 1-10

=> player1 : 첫 로그인(7)-8일 연속이므로 조건 만족

=> player2 : 9-10일이 연속되나 첫 로그인 기록인 7일 다음이 아니므로 조건 불만족

 


>> 예시

player1 -> 16-3-1일 첫 로그인 => 16-3-2일도 로그인 (2틀 연속 로그인 ) => O

player2 -> 17-6-25일 첫 로그인 => 17-6-26에는 로그인 X (2틀 연속 로그인X ) => X

player3 -> 16-3-2일 첫 로그인 => 16-3-3에는 로그인 X (2틀 연속 로그인X ) => X

 


풀이 단계

- 1단계 : 각 플레이어의 첫 로그인 일자 다음날 리스트 테이블 만들기

- 2단계 : 플레이어가 2틀 연속 접속했는지 flag만들기

- 3단계 : flag에 따라 비율 계산해주기

 


- 1단계 : 각 플레이어의 첫 로그인 일자 다음날 리스트 테이블 만들기

 

=> 첫 로그인일로부터 최소 2틀 연속 접속

== 첫 로그인 다음날 접속기록이 있는가?

 

=> 각 플레이어의 최소 접속기록+1 데이터를 만들어주자!

 

=> 결과

해석 :

- player 1은 3/1일에 첫 접속 => 3/2일 접속기록이 있는가?

- player2는 6/25일에 첫 접속 => 6/26일 접속기록이 있는가?

- player3은 3/2일에 첫접속 => 3/3일 접속기록이 있는가?

 


- 2단계 : 플레이어가 2틀 연속 접속했는지 flag만들기

- Activity Table과 player_id로 결합

=> min_date 값이 있으면 1로 flag 표시

 

=> 결과


- 3단계 : flag에 따라 비율 계산해주기

 

=> 정답 코드

 

=> 쿼리 살펴보기

비율 계산 : 연속 접속 player 수 / 전체 player 수

 

- 연속 접속 player 수

count( distinct ( case when c.flag=1 then c.player_id end ) )

=> flag가 1이면 player_id를 세주되 중복 제거

 

- 전체 player수

: count(distinct c.player_id)

=> 전체 player_id 수를 반환

 

 


=> 최종결과