inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

[인프런 빅쿼리 빠짝스터디 3주차] 리텐션 분석

124

양승엽

작성한 질문수 5

0

1) 리텐션 연습 문제

https://torch-cart-08d.notion.site/3-139701964d8c805d9e49f3c68ab9b0b5

 

2) 3주차 추가 문제

1번 문제(15분)

SELECT
  *,
  RANK() OVER(PARTITION BY category ORDER BY rate DESC) AS category_rank
FROM (
SELECT
    category,
    FORMAT_DATETIME('%Y-%m-%d 23:59:39', PARSE_DATETIME('%m/%d/%Y %H:%M:%S', transaction_date)) AS transaction_date,
    actual_price,
    list_price,
    ((list_price - actual_price) / list_price) * 100 AS rate
  FROM transaction_data AS td
  LEFT JOIN item_info ii
  ON td.item_id = ii.item_id
)
QUALIFY category_rank = 1
ORDER BY category, transaction_date

 

2번 문제(10분)

SELECT
  category,
  SUM(actual_price) AS total_price
FROM (
  SELECT
    category,
    FORMAT_DATETIME('%Y-%m-%d 23:59:39', PARSE_DATETIME('%m/%d/%Y %H:%M:%S', transaction_date)) AS transaction_date,
    actual_price,
  FROM transaction_data AS td
  LEFT JOIN item_info ii
  ON td.item_id = ii.item_id
  WHERE EXTRACT(MONTH FROM PARSE_DATETIME('%m/%d/%Y %H:%M:%S', transaction_date)) = 1
)
GROUP BY ALL
ORDER BY total_price DESC
LIMIT 1

 

3번 문제(10분)

over_200 AS (
  SELECT
    td.user_id,
    SUM(actual_price) AS user_price
  FROM transaction_data AS td
  LEFT JOIN user_info AS ui
  ON td.user_id = ui.user_id
  GROUP BY ALL
  HAVING user_price >= 2000000
)

SELECT
  category,
  COUNT(*) AS cnt
FROM over_200 AS O2
CROSS JOIN transaction_data AS td
LEFT JOIN item_info AS ii
ON td.item_id = ii.item_id
GROUP BY ALL
ORDER BY cnt DESC
LIMIT 1

sql Google-Analytics firebase google-sheets bigquery

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 양승엽님의 질문에 대한 답변을 드리겠습니다.

우선, 1번 문제를 해결하는 과정에서 날짜 데이터를 YYYY-MM-DD 23:59:39 형태로 변환하는 방법은 FORMAT_DATETIME() 함수를 사용하면 됩니다. 이미 올바른 접근을 하고 계신 것으로 보입니다. 이 함수를 활용하여 데이터를 형식에 맞춰 변환할 수 있습니다. 쿼리 작성 시 FORMAT_DATETIME()PARSE_DATETIME()을 적절하게 사용하셨네요.

1번 문제에서의 주의점은, FORMAT_DATETIME() 함수 내에서 사용하고 있는 PARSE_DATETIME()의 포맷이 입력 데이터의 실제 포맷과 일치해야 한다는 점입니다.

2번 문제에서는 2024년 1월에 가장 많은 매출을 기록한 카테고리를 구하는 과정에서 EXTRACT() 함수를 사용해 월을 추출하는 방법도 잘 사용하셨습니다.

3번 문제의 경우, 총 구매 금액을 기준으로 사용자 리스트를 필터링하고, 그 사용자들이 가장 많이 구매한 카테고리를 찾는 접근도 적절하게 잘 이루어졌습니다. CROSS JOIN으로 각 유저의 거래 정보를 다시 결합하여 카테고리를 찾는 방법을 사용하고 계신 점에서 쿼리 작성이 잘 준비되었음을 알 수 있습니다.

관련하여 유용한 참고 사항으로, 리텐션 분석 및 다양한 지표 정의에 관한 답변을 찾아내어 공유드립니다:

  • 리텐션 관련 자세한 접근 방법 및 해석에 도움을 줄 수 있는 4-8. 지표 정의 연습 문제 풀이 답변 올려볼게요!을 참고하시는 것도 좋습니다. 데이터와 코호트를 어떻게 분리하고 분석할 수 있는지에 대한 상세한 설명을 포함하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최종 과제 제출

0

82

3

BigQuery 활용편 18강 질문있습니다!

0

84

1

리텐션 공부하다가 궁금한게 생겨 질문드립니다

0

83

2

안녕하세요 강사님 코호트 쿼리 공부하다가 의문점이 생겨서 문의드립니다

0

75

2

biquery 테이블 생성 오류 이슈

0

55

2

동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다

0

73

2

[과제] 퍼널 PIVOT 테이블 작성하기

0

67

2

array 등

0

63

2

N day 리텐션 쿼리 관련 질문

0

63

2

이동평균 계산 시 order by 기본값은 뭔가요?

0

69

2

윈도우 연습문제 1번 질문

0

65

1

user_id에 NULL이 나오는데 정상인가요?

0

72

2

3-13 리텐션 과제 제출

0

94

2

최종 과제 제출

0

130

3

weekly retention 구하기 과제

0

90

2

1-9. 피벗 쿼리 작성

0

81

2

app_logs 테이블 생성 문제

0

73

2

Weekly Retention 구하기 완성하였습니다.

0

77

2

[과제] 퍼널 쿼리(피벗테이블 적용) 작성 완료

0

106

2

3-7 Weekly, Monthly Retention 쿼리 작성

0

92

2

정성 데이터 분석 방법 문의

0

165

1

최종 과제 제출

0

108

3

1-6 예시 문제 풀이

0

69

2

최종과제 제출

0

145

2