홍동이의 성장일기

[LeetCode] 550. Game Play Analysis IV 본문

Tool/SQL 코딩테스트 풀이

[LeetCode] 550. Game Play Analysis IV

홍동2 2023. 8. 14. 13:31

 

Game Play Analysis IV - LeetCode

Can you solve this real interview question? Game Play Analysis IV - Table: Activity +--------------+---------+ | Column Name | Type | +--------------+---------+ | player_id | int | | device_id | int | | event_date | date | | games_played | int | +---------

leetcode.com

 

WITH cte_login AS(
  SELECT player_id
        , DATEDIFF(event_date, MIN(event_date) OVER(PARTITION BY player_id)) = 1 as login
  FROM activity
)
SELECT ROUND(SUM(login) / COUNT(DISTINCT player_id), 2) as fraction
FROM cte_login

 

💡 개념정리

 

with문 쿼리

 

1. 최초 로그인한 날 MIN(event_date) 과 다음 로그인 한 날이 연속으로 있는지를 알아보기 두 날짜의 차이가 1인 행을 찾아야한다. (DATEDIFF)

 

 

[MySQL] 날짜 차이 가져오기 (DATEDIFF, TIMESTAMPDIFF 함수)

▶MySQL 날짜 차이 가져오기 (DATEDIFF, TIMESTAMPDIFF 함수) ▶설명 MySQL에서 두 날짜간의 차이를 가져올 때 사용하는 함수가 두 가지가 있습니다. 단순히 일 차이를 가져올 때 사용하는 것이 DATEDIFF 함수

extbrain.tistory.com

 

2. player_id별로 로그인 여부를 파악해야 하므로 PARTITION BY를 사용해준다. (GROUP BY를 해버리면 최초 또는 최대의 날짜밖에 구하지 못한다)

 

 

[MySQL] GROUP BY, PARTITION BY 차이점

GROUP BY와 PARTITION BY의 가장 큰 차이점은 행 수이다. ✅ GROUP BY GROUP BY 절은 특정 칼럼을 기준으로 집계 함수를 사용하여 건수(COUNT), 합계(SUM), 평균(AVG) 등 집 계성 데이터를 추출할 때 사용 group 에

jie0025.tistory.com

 

<쿼리 결과>


결과 쿼리

 

3. (연속 2일 로그인한 사용자 수 / 전체 사용자 수)를 해주고 반올림해준다.

 

 

solution없이 혼자 문제를 풀게되는 그날까지,,🥲

 


📍본 내용은 데이터리안 'SQL 데이터 분석 캠프 실전반' 을 수강하며 작성한 내용입니다.

728x90
Comments