해결된 질문
작성
·
32
0
안녕하세요.
수업 잘 듣고 있습니다.
말씀 해 주신대로 풀이 보기 전에 풀어보고 다시 영상보고하니 재미도 있고 실력도 빨리 느는 것 같아요. 감사합니다!
1-9 강의에서 주신 피벗 쿼리 작성해 봤습니다!
WITH funnel_base AS (
SELECT
event_date,
event_timestamp,
event_name,
-- params.key AS key,
-- params.value.string_value AS string_value,
-- params.value.int_value AS int_value,
user_id,
user_pseudo_id,
platform,
MAX(IF(params.key="firebase_screen",params.value.string_value,NULL))AS firebase_screen,
MAX(IF(params.key="session_id",params.value.string_value,NULL))AS session_id,
-- MAX(IF(params.key="food_id",params.value.int_value,NULL))AS food_id
FROM
`advance.app_logs`
CROSS JOIN
UNNEST (event_params) AS params
WHERE
event_date BETWEEN "2022-08-01" AND "2022-08-18"
GROUP BY ALL
), filter_event AS (
-- event_name+screen
SELECT
* EXCEPT(event_name, firebase_screen,event_timestamp),
CONCAT(event_name,'-', firebase_screen) AS event_name_with_screen,
DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_timestamp
FROM
funnel_base
WHERE
event_name IN ('screen_view', 'click_payment')
), funnel_step AS (
SELECT
event_date,
filter_event.event_name_with_screen,
CASE
WHEN filter_event.event_name_with_screen = 'screen_view-welcome' THEN 1
WHEN filter_event.event_name_with_screen = 'screen_view-home' THEN 2
WHEN filter_event.event_name_with_screen = 'screen_view-food_category' THEN 3
WHEN filter_event.event_name_with_screen = 'screen_view-restaurant' THEN 4
WHEN filter_event.event_name_with_screen = 'screen_view-cart' THEN 5
WHEN filter_event.event_name_with_screen = 'click_payment-cart' THEN 6
ELSE NULL
END AS step_number,
COUNT(user_pseudo_id) AS cnt
FROM filter_event
WHERE
event_date BETWEEN "2022-08-01" AND "2022-08-15"
GROUP BY ALL
HAVING
step_number IS NOT NULL)
--3. event_name_with_screen 컬럼으로, 일자별로 count
SELECT
event_date,
SUM(IF(funnel_step.event_name_with_screen = "screen_view-welcome", cnt, null)) AS `screen_view-welcome`,
SUM(IF(funnel_step.event_name_with_screen = "screen_view-home", cnt, null)) AS `screen_view-home`,
SUM(IF(funnel_step.event_name_with_screen = "screen_view-food_category", cnt, null)) AS `screen_view-food_category`,
SUM(IF(funnel_step.event_name_with_screen = "screen_view-restaurant", cnt, null)) AS `screen_view-restaurant`,
SUM(IF(funnel_step.event_name_with_screen = "screen_view-cart", cnt, null)) AS `screen_view-cart`,
SUM(IF(funnel_step.event_name_with_screen = "click_payment-cart", cnt, null)) AS `click_payment-cart`
FROM
funnel_step
GROUP BY ALL
ORDER BY
event_date
답변 2
0
Min님 안녕하세요!
제가 공유드린 흐름으로 공부해주셔서 감사합니다. 직접 짜보고 제 쿼리랑 비교해보면 어떤 부분에서 생각이 달랐는지 알 수 있고, 이 부분이 저의 암묵지라고 할 수 있더라구요. 그 부분을 모두 다 학습해주셔요
쿼리는 잘 작성해주셨고, BigQuery에 PIVOT 함수가 사실 있어요. 다만 자유도가 떨어지고 PIVOT 함수가 없는 DB도 있어서 강의에서 설명드린 방식을 선호하는 편이에요.
강의에서 설명드린 방식을 모두 익히셨으니, 그 다음으로 PIVOT 쿼리도 한번 살펴보셔요!
아래 글에서 확인하실 수 있어요
https://zzsza.github.io/gcp/2021/05/16/bigquery-pivot/
공부 계속 파이팅입니다!
0
안녕하세요, 인프런 AI 인턴입니다. Min님.
수업을 잘 따라가고 계신 것 같아 기쁩니다. 피벗 쿼리를 작성하신 것에 대해 잘 수행하셨습니다. 각 단계별로 데이터를 집계하고 변환하는 과정을 PIVOT 기법을 통해 실현하셨는데요, 몇 가지 피드백 드리겠습니다.
GROUP BY ALL
의 사용:
GROUP BY ALL
은 모든 열을 그룹화하는 것이 아니라, 특정 열에 대해서만 그룹핑하는 것이 일반적입니다. 여기서는 event_date
만으로 그룹화하는 것이 필요합니다.IF문 대체:
SUM(IF(..., cnt, null))
에서 null
보다는 0을 사용하는 것이 더 안전할 수 있습니다. 이는 계수가 없는 경우 0으로 처리하기 위함입니다.피벗 함수 활용:
쿼리 검증:
다음 링크들은 유사한 과제와 그 해결 방안을 찾는 데 도움이 될 것입니다:
이 링크들은 PIVOT 및 퍼널 쿼리를 작성할 때 발생할 수 있는 다양한 문제와 해결 방법을 제시하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.