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 수를 반환
=> 최종결과
'데이터 분석 > SQL' 카테고리의 다른 글
[MYSQL] 1204. Last Person to Fit in the Bus (0) | 2023.07.17 |
---|---|
[SQLite] 폐쇄할 따릉이 정류소 찾기1 / join 키 값 불일치 설정 (0) | 2023.05.28 |
[MYSQL] Interviews /차근차근 결합하기 (0) | 2023.05.12 |
[스크랩 ] MYSQL - DECODE함수 (1) | 2023.04.24 |
[MYSQL] SQL Project Planning / 2가지 풀이 (0) | 2023.04.24 |