Weekly 및 Monthly Retention 과제 제출합니다.
2
1 câu hỏi đã được viết
--Weekly Retention
WITH base AS(
SELECT
user_pseudo_id,
event_name,
DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date,
DATE_TRUNC(DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), WEEK(MONDAY)) AS event_week,
FROM advanced.app_logs
WHERE
event_date BETWEEN '2022-08-01' AND '2022-11-03'
), first_week_data AS(
#first_week 추출
SELECT
DISTINCT
user_pseudo_id,
event_week,
MIN(event_week) OVER(PARTITION BY user_pseudo_id) AS first_week,
FROM base
), week_diff_user_cnt_data AS(
#week_diff 및 user_cnt 추출
SELECT
week_diff,
COUNT(DISTINCT user_pseudo_id) AS user_cnt
FROM(
SELECT
*,
DATE_DIFF(event_week, first_week, WEEK(MONDAY)) AS week_diff
FROM first_week_data
)
GROUP BY week_diff
)
#first_week_user_cnt 및 retention_ratio 추출
SELECT
*,
ROUND(SAFE_DIVIDE(user_cnt, first_week_user_cnt), 3) AS retention_rate
FROM(
SELECT
*,
FIRST_VALUE(user_cnt) OVER(ORDER BY week_diff) AS first_week_user_cnt
FROM week_diff_user_cnt_data
)
ORDER BY week_diff--Monthly Retention
WITH base AS(
SELECT
user_pseudo_id,
event_name,
DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date,
DATE_TRUNC(DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), MONTH) AS event_month,
FROM advanced.app_logs
WHERE
event_date BETWEEN '2022-08-01' AND '2022-11-03'
), first_month_data AS(
#first_month 추출
SELECT
DISTINCT
user_pseudo_id,
event_month,
MIN(event_month) OVER(PARTITION BY user_pseudo_id) AS first_month,
FROM base
), month_diff_user_cnt_data AS(
#month_diff 및 user_cnt 추출
SELECT
month_diff,
COUNT(DISTINCT user_pseudo_id) AS user_cnt
FROM(
SELECT
*,
DATE_DIFF(event_month, first_month, MONTH) AS month_diff
FROM first_month_data
)
GROUP BY month_diff
)
#first_month_user_cnt 및 retention_ratio 추출
SELECT
*,
ROUND(SAFE_DIVIDE(user_cnt, first_month_user_cnt), 3) AS retention_rate
FROM(
SELECT
*,
FIRST_VALUE(user_cnt) OVER(ORDER BY month_diff) AS first_month_user_cnt
FROM month_diff_user_cnt_data
)
ORDER BY month_diff더 보완할 점은 없는지 평가해 주시면 감사하겠습니다. 강의 항상 정말 잘 듣고있습니다.
Câu trả lời 1
0
안녕하세요, 인프런 AI 인턴입니다.
Kay님께서 작성하신 Weekly 및 Monthly Retention SQL 쿼리에 대해 리뷰를 해드리겠습니다. 작성하신 쿼리는 매우 잘 구성되어 있어 리텐션 분석을 수행하는 데 충분한 정보를 제공하고 있습니다. 그러나 몇 가지 개선할 수 있는 부분을 말씀드리겠습니다.
개선 제안 사항
CTE 내의 중복 필드 제거:
MIN(event_week) OVER(PARTITION BY user_pseudo_id)같은 연산을DISTINCT와 함께 사용할 필요가 없습니다. 이미 같은 결과를 추출합니다.
사용자 데이터의 유효성 검사:
- 데이터의 일관성과 정확성을 위해 시간 계산과 관련된 테이블이 올바르게 정리되었는지 확인하세요. 예를 들어,
event_date BETWEEN조회 조건을 쿼리 밖에서도 확인하여 서로 다른 기간의 데이터를 처리하지 않도록 주의해야 합니다.
- 데이터의 일관성과 정확성을 위해 시간 계산과 관련된 테이블이 올바르게 정리되었는지 확인하세요. 예를 들어,
네이밍 컨벤션 및 가독성:
- 컬럼이나 CTE의 네이밍은 코드 가독성을 높이고 다른 개발자들이나 스스로 나중에 쿼리를 이해하기 쉽게 도와줍니다.
base,first_week_data대신 좀 더 의미 있는 이름을 사용할 수 있습니다.
- 주석도 간단하고 명확하게 작성하여 나중에 쿼리를 읽는 사람이 쉽게 이해할 수 있도록 지향합니다.
- 컬럼이나 CTE의 네이밍은 코드 가독성을 높이고 다른 개발자들이나 스스로 나중에 쿼리를 이해하기 쉽게 도와줍니다.
쿼리 간 결합 검사:
- Weekly와 Monthly 모두 동일한
baseCTE를 사용하고 있어 유지보수 측면에서 쿼리 블록이 서로 영향을 미칠 수 있습니다. 필요시, 두 계산을 분리하거나 재사용을 고려하세요.
- Weekly와 Monthly 모두 동일한
리소스 제공
유사한 문제나 개선을 담고 있는 질문과 답변을 통해 더욱 깊은 이해를 얻으실 수 있습니다. 다음 링크를 참고하시기 바랍니다:
3-7 리텐션 SQL 쿼리 작성하기 연습 (Weekly, Monthly)
- 복잡한 쿼리 내 가독성 및 개선할 점에 대한 정보를 제공하고 있습니다.
- 복잡한 쿼리 내 가독성 및 개선할 점에 대한 정보를 제공하고 있습니다.
-
- 데이터 분석 시 리텐션 계산 후 발생할 수 있는 중복 등을 다루고 있습니다.
- 데이터 분석 시 리텐션 계산 후 발생할 수 있는 중복 등을 다루고 있습니다.
이 자료들이 Kay님의 SQL 쿼리 작성에 보다 큰 도움이 되기를 바랍니다. 강의를 통해 데이터 분석 능력을 꾸준히 발전시키시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
[과제] 퍼널 쿼리 PIVOT 테이블 작성
0
49
2
최종 과제 제출
0
127
3
BigQuery 활용편 18강 질문있습니다!
0
98
1
리텐션 공부하다가 궁금한게 생겨 질문드립니다
0
101
2
안녕하세요 강사님 코호트 쿼리 공부하다가 의문점이 생겨서 문의드립니다
0
94
2
biquery 테이블 생성 오류 이슈
0
75
2
동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다
0
86
2
[과제] 퍼널 PIVOT 테이블 작성하기
0
85
2
array 등
0
79
2
N day 리텐션 쿼리 관련 질문
0
77
2
이동평균 계산 시 order by 기본값은 뭔가요?
0
84
2
윈도우 연습문제 1번 질문
0
80
1
user_id에 NULL이 나오는데 정상인가요?
0
85
2
3-13 리텐션 과제 제출
0
112
2
최종 과제 제출
0
151
3
weekly retention 구하기 과제
0
105
2
1-9. 피벗 쿼리 작성
0
95
2
app_logs 테이블 생성 문제
0
88
2
Weekly Retention 구하기 완성하였습니다.
0
90
2
[과제] 퍼널 쿼리(피벗테이블 적용) 작성 완료
0
123
2
3-7 Weekly, Monthly Retention 쿼리 작성
0
97
2
정성 데이터 분석 방법 문의
0
181
1
최종 과제 제출
0
117
3
1-6 예시 문제 풀이
0
79
2

