250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- SQL
- 윈도우함수
- 문풀
- 약수구하기
- SQL테스트
- 데벨챌
- 프로그래머스문풀
- 그로스해킹
- 데이터리안실전반
- 오블완
- leetcode문풀
- sql50
- 코테준비
- join
- 위키독스
- 서브쿼리
- mysql
- 데이터리안넥스트레벨챌린지
- leetcode
- 파이썬
- with절
- SQL고득점KIT
- levle1
- 프로그래머스
- 티스토리챌린지
- 데이터리안
- 셀프조인
- sql문풀
- 활성사용자수
- 파이썬문풀
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 연달아 로그인한 사람의 비율 구하기 본문
728x90
출처: [leetcode - SQL50] : 550. Game Play Analysis IV
문제: 첫 로그인 이후 다음날 연속해서 로그인한 플레이어의 비율을 계산
WITH절 이용하기
1) player별로 처음으로 접속한 날을 조회하는 WITH절 생성
2) 첫접속일 WIHT절과 player_id가 같고, 접속일이 +1일 때 JOIN하는 WITH절 생성
3) 원본 df과 2번 df을 LEFT로 JOIN(연속 접속하지 않은 사용자도 포함되도록),
2번 df의 player_id수 / 원본 df의 player_id의 수로 비율 구하기
WITH FirstLogin AS (
SELECT
player_id,
MIN(event_date) AS first_login_date
FROM
Activity
GROUP BY
player_id
),
NextDayLogin AS (
SELECT
f.player_id,
f.first_login_date,
a.event_date AS next_day
FROM
FirstLogin f
JOIN
Activity a
ON
f.player_id = a.player_id
AND a.event_date = DATE_ADD(f.first_login_date, INTERVAL 1 DAY)
)
SELECT
ROUND(COUNT(DISTINCT NextDayLogin.player_id) / COUNT(DISTINCT FirstLogin.player_id), 2) AS fraction
FROM
FirstLogin
LEFT JOIN
NextDayLogin
ON
FirstLogin.player_id = NextDayLogin.player_id;
728x90
'SQL > SQL문풀' 카테고리의 다른 글
[MY SQL] 3회 연속인 숫자 구하기 (0) | 2025.01.17 |
---|---|
[MY SQL] 모든 제품을 구매한 고객 조회하기 (0) | 2025.01.16 |
[MY SQL] 여러 행(레코드)의 값을 하나의 문자열로 결합 (1) | 2024.12.18 |
[MY SQL] 그룹별 비율의 평균 구하기 (1) | 2024.09.26 |
[MY SQL] 콘테스트별 참여비율 확인하기 (1) | 2024.09.25 |