[과제]1-9 피벗 테이블 만들어보기
2
2 câu hỏi đã được viết
안녕하세요.
강의 마지막 부분의 피벗 과제 올려봅니다.
감사합니다.!
WITH base AS(
SELECT
user_id,
event_date,
event_name,
event_timestamp,
user_pseudo_id,
MAX(IF(ep.key = "firebase_screen",ep.value.string_value,NULL)) AS firebase_screen,
MAX(IF(ep.key = "food_id",ep.value.int_value,NULL)) AS food_id,
MAX(IF(ep.key = "session_id",ep.value.string_value,NULL)) AS session_id
FROM advanced.app_logs
CROSS JOIN UNNEST(event_params) AS ep
WHERE event_date BETWEEN "2022-08-01" AND "2022-08-18"
GROUP BY ALL
), filter_event_name_screen AS(
SELECT
* EXCEPT(event_name,firebase_screen),
CONCAT(event_name,"-",firebase_screen) AS event_name_with_screen,
DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul') AS event_datetime
FROM base
WHERE
event_name IN ("screen_view","click_payment")
)
SELECT
* EXCEPT (step_number, event_name_with_screen,cnt),
MAX(IF(event_name_with_screen = "screen_view-welcome",cnt,NULL)) AS `screen_view_welcome`,
MAX(IF(event_name_with_screen = "screen_view-home",cnt,NULL)) AS `screen_view-home`,
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-restaurant",cnt,NULL)) AS `screen_view-restaurant`,
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`,
FROM
(
SELECT
event_date,
event_name_with_screen,
CASE
WHEN event_name_with_screen = "screen_view-welcome" THEN 1
WHEN event_name_with_screen = "screen_view-home" THEN 2
WHEN event_name_with_screen = "screen_view-food_category" THEN 3
WHEN event_name_with_screen = "screen_view-restaurant" THEN 4
WHEN event_name_with_screen = "screen_view-cart" THEN 5
WHEN event_name_with_screen = "click_payment-cart" THEN 6
ELSE NULL
END AS step_number,
COUNT(user_pseudo_id) AS cnt
FROM filter_event_name_screen
GROUP BY ALL
HAVING step_number IS NOT NULL
--ORDER BY step_number
)
GROUP BY ALL
ORDER BY event_date
Câu trả lời 1
0
안녕하세요, 인프런 AI 인턴입니다. 나예님.
피벗 구조를 잘 작성하셨습니다. event_name_with_screen별로 step_number와 cnt를 만든 뒤, 바깥쪽에서 MAX(IF(...))를 사용해 날짜별 컬럼으로 변환하는 방식은 강의의 의도와 동일합니다.
다만 퍼널별 사용자 수를 계산하려는 목적이라면 다음 부분을 확인해 주세요.
COUNT(user_pseudo_id) AS cnt
현재 쿼리는 동일 사용자가 같은 화면을 여러 번 조회한 경우 조회 횟수까지 모두 집계합니다. 사용자 수를 구하려면 아래처럼 DISTINCT를 사용하는 것이 일반적입니다.
COUNT(DISTINCT user_pseudo_id) AS cnt
또한 SELECT * EXCEPT (...)와 GROUP BY ALL을 활용한 방식도 BigQuery에서는 동작하지만, 실무에서는 결과에 필요한 컬럼인 event_date를 명시적으로 작성하면 쿼리의 의도가 더 분명해집니다.
관련된 기존 답변을 함께 참고해 보세요.
위 게시물에서도 MAX(IF(...))를 활용한 피벗 방식과 COUNT(DISTINCT user_pseudo_id)를 사용한 퍼널 사용자 수 집계 방법을 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
cnt수를 구할 때 왜 user_pseudo_id 를 사용하나요?
0
8
1
최종 과제 제출합니다.
0
74
2
3-13 과제
0
75
3
3-13 리텐션 과제 제출합니다
0
81
2
app logs 데이터로 쿼리 연습
0
84
2
[과제] 연습문제 쿼리 작성했습니다!
0
76
2
6-1. 강의 최종 과제 제출합니다.
0
90
3
3-13 리텐션 과제 제출합니다
0
154
3
3-13. 리텐션 연습과제 제출합니다.
0
124
4
최종 과제 제출
0
98
3
Weekly Retention 과제 작성하였습니다.
0
77
2
3-10 강의 14분경 코호트 해석 질문드립니다.
0
86
2
Weekly 및 Monthly Retention 과제 제출합니다.
0
82
2
[과제] 퍼널 쿼리 PIVOT 테이블 작성
0
96
2
최종 과제 제출
0
166
3
BigQuery 활용편 18강 질문있습니다!
0
121
1
리텐션 공부하다가 궁금한게 생겨 질문드립니다
0
134
2
안녕하세요 강사님 코호트 쿼리 공부하다가 의문점이 생겨서 문의드립니다
0
127
2
biquery 테이블 생성 오류 이슈
0
125
2
동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다
0
128
2
[과제] 퍼널 PIVOT 테이블 작성하기
0
135
2
array 등
0
113
2
N day 리텐션 쿼리 관련 질문
0
116
2
이동평균 계산 시 order by 기본값은 뭔가요?
0
116
2

