[과제] 연습문제 쿼리 작성했습니다!
1
작성한 질문수 5
안녕하세요 카일님,
강의 잘 듣고 있습니다.
연습문제 쿼리 작성해 보았는데 잘못된 부분이 있는지, 더 나은 쿼리 방식이 있다면 피드백 부탁드립니다
감사합니다.
WITH basic AS
(SELECT
event_date,
event_name,
user_pseudo_id,
event_params,
if(event_params.key="firebase_screen", event_params.value.string_value, null) as screen
FROM advanced.app_logs
CROSS JOIN UNNEST(event_params) as event_params
WHERE event_date between '2022-08-01' and '2022-08-18'
),
basic2 as (
SELECT
event_date,
concat(event_name, '-', screen) as event_name_with_screen,
COUNT(user_pseudo_id) as cnt
FROM basic
WHERE event_name in ('screen_view', 'click_payment')
GROUP BY ALL
HAVING event_name_with_screen is not null
ORDER BY event_date)
SELECT
event_date,
MAX(if(event_name_with_screen='screen_view-welcome', cnt, null)) as screen_view_welcome,
MAX(if(event_name_with_screen='screen_view-restaurant', cnt, null)) as screen_view_restaurant,
MAX(if(event_name_with_screen='screen_view-food_category', cnt, null)) as screen_view_food_category,
MAX(if(event_name_with_screen='screen_view-food_detail', cnt, null)) as screen_view_food_detail,
MAX(if(event_name_with_screen='screen_view-cart', cnt, null)) as screen_view_cart,
MAX(if(event_name_with_screen='click_payment-cart', cnt, null)) as click_payment_cart,
MAX(if(event_name_with_screen='screen_view-search', cnt, null)) as screen_view_search,
MAX(if(event_name_with_screen='screen_view-search_result', cnt, null)) as screen_view_search_result
FROM basic2
GROUP BY all
ORDER BY event_date
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 이유정님.
작성하신 쿼리는 WITH 절로 단계를 나누고, MAX(IF(...))를 활용해 이벤트별 컬럼으로 피벗한 구조라 전반적인 방향은 좋습니다.
다만 다음 부분은 확인해 보시면 좋습니다.
COUNT(user_pseudo_id)는 사용자 수가 아니라 이벤트 행의 개수를 집계합니다. 퍼널별 유저 수를 구하려는 목적이라면COUNT(DISTINCT user_pseudo_id)를 사용하는 것이 적절합니다.
CROSS JOIN UNNEST(event_params)이후firebase_screen파라미터가 아닌 행도 생성되므로, 필요한 파라미터만 추출하거나MAX(IF(...))방식으로 이벤트 단위로 먼저 정리하면 중복 집계를 방지할 수 있습니다.
- 현재 결과에 값이 없는 단계는
NULL로 표시됩니다. 분석 결과에서 0으로 표시하려면COALESCE(MAX(IF(...)), 0)처럼 처리할 수 있습니다.
- 피벗 시 동일한 조건에 여러 행이 생길 수 있는 경우, 단순히
MAX를 사용할지SUM을 사용할지는 데이터의 중복 여부와 집계 의도에 따라 결정해야 합니다.
유사한 질문과 지식공유자님의 답변을 아래에서 확인해 보세요.
1-9 마지막 테이블 피벗 해보기
MAX(IF(...))와SUM(IF(...))의 차이, BigQuery PIVOT 사용 방법을 확인할 수 있습니다.[과제] 퍼널 쿼리(피벗테이블 적용) 작성 완료
퍼널별 유저 수를 먼저 집계한 뒤MAX(IF(...))로 피벗하는 전체 쿼리 흐름을 참고할 수 있습니다.[과제] 퍼널 PIVOT 테이블 작성하기
SUM과MAX를 선택할 때의 기준과NULL처리에 대한 설명이 포함되어 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
6-1. 강의 최종 과제 제출합니다.
0
54
3
3-13 리텐션 과제 제출합니다
0
111
3
3-13. 리텐션 연습과제 제출합니다.
0
84
4
최종 과제 제출
0
68
3
Weekly Retention 과제 작성하였습니다.
0
62
2
3-10 강의 14분경 코호트 해석 질문드립니다.
0
73
2
Weekly 및 Monthly Retention 과제 제출합니다.
0
71
2
[과제] 퍼널 쿼리 PIVOT 테이블 작성
0
72
2
최종 과제 제출
0
142
3
BigQuery 활용편 18강 질문있습니다!
0
110
1
리텐션 공부하다가 궁금한게 생겨 질문드립니다
0
116
2
안녕하세요 강사님 코호트 쿼리 공부하다가 의문점이 생겨서 문의드립니다
0
106
2
biquery 테이블 생성 오류 이슈
0
104
2
동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다
0
109
2
[과제] 퍼널 PIVOT 테이블 작성하기
0
104
2
array 등
0
90
2
N day 리텐션 쿼리 관련 질문
0
97
2
이동평균 계산 시 order by 기본값은 뭔가요?
0
94
2
윈도우 연습문제 1번 질문
0
91
1
user_id에 NULL이 나오는데 정상인가요?
0
108
2
3-13 리텐션 과제 제출
0
142
2
최종 과제 제출
0
188
3
weekly retention 구하기 과제
0
128
2
1-9. 피벗 쿼리 작성
0
111
2





