홍동이의 성장일기
[LeetCode] 550. Game Play Analysis IV 본문
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 데이터 분석 캠프 실전반' 을 수강하며 작성한 내용입니다.
'Tool > SQL 코딩테스트 풀이' 카테고리의 다른 글
[LeetCode] 1045. Customers Who Bought All Products (0) | 2023.08.16 |
---|---|
[LeetCode] 570. Managers with at Least 5 Direct Reports (0) | 2023.08.15 |
[LeetCode] 262. Trips and Users (0) | 2023.08.14 |
[LeetCode] 184. Department Highest Salary (0) | 2023.08.12 |
[LeetCode] 181. Employees Earning More Than Their Managers (0) | 2023.08.12 |