인프런 커뮤니티 질문&답변

orchid Y님의 프로필 이미지
orchid Y

작성한 질문수

PM을 위한 데이터 리터러시(프로덕트 데이터 분석)

6-6. Foodie Express 프로젝트 데이터 로그 설계하기

6-6 메인지표 SQL쿼리 짜보기

해결된 질문

작성

·

203

0

안녕하세요, 선생님. 이번 강의에서 질문이 하나 더 있었습니다! 앞에 남긴 질문과 한꺼번에 남길걸 그랬네요..😅  선생님께서 추천을 통한 주문 전환률 (CVR) 을 구하기 위해 작성한 쿼리를 보니# 선생님 풀이 SELECT event_date , use_recomend_payment / click_recomend_food AS recommend_cvr FROM( SELECT event_date , COUNTIF(event_name = " click_payment" AND use_recommend_food = "TRUE") AS use_recomend_payment #추천음식 클릭하여 결제 , COUNTIF(event_name = "click_recommend_food")  AS click_recommend_food #추천음식 클릭 FROM log WHERE is_meet_min_order_price = 'False' GROUP BY event_date ) AS temp
1) 추천상품 클릭하여 전환된 횟수 ( use_recomend_payment)와, 추천음식을 클릭한 횟수(click_recommend_food) 를 구해서 from절 서브쿼리에 넣기2) 추천상품 클릭하여 전환된 횟수 / 추천음식 클릭 횟수 연산하여 recommend_cvr 구하기
이렇게 from 절을 써야하더라구요.  선생님의 해설을 보기 전, 스스로 풀었을 때는 from절을 쓰지 않고 그냥 한번에 썼었습니다. #셀프풀이 SELECT event_date , COUNTIF(event_name = " click_payment" AND use_recommend_food = "TRUE") AS use_recomend_payment #추천음식 클릭하여 결제 , COUNTIF(event_name = "click_recommend_food")  AS click_recommend_food , COUNTIF(event_name = " click_payment" AND use_recommend_food = "TRUE") / COUNTIF(event_name = "click_recommend_food") AS recommend_cvr FROM log WHERE is_meet_min_order_price = 'False' GROUP BY event_date혹시 이렇게 한번에 쓰면 오류가 발생하는지, 서브쿼리를 사용하여 풀어야 하는 이유가 무엇인지 궁금합니다! 여유있으실 때 회신 주세요.감사합니다! 

답변 1

0

카일스쿨님의 프로필 이미지
카일스쿨
지식공유자

orchid Y님 안녕하세요! 열심히 공부하고 계시는군요!

쿼리를 좀 더 보기 쉽게 작성해볼게요(코드블럭을 사용하시면서 공유해주시면 더 가독성 있게 볼 수 있어요!)

제가 풀었던 쿼리

SELECT 
  event_date, 
  use_recomend_payment / click_recomend_food AS recommend_cvr 
FROM(
  SELECT 
    event_date, 
    COUNTIF(event_name = " click_payment" AND use_recommend_food = "TRUE") AS use_recomend_payment,
    COUNTIF(event_name = "click_recommend_food") AS click_recommend_food
  FROM log 
  WHERE is_meet_min_order_price = 'False' 
  GROUP BY event_date 
)

 

셀프 풀이

SELECT 
  event_date, 
  COUNTIF(event_name = " click_payment" AND use_recommend_food = "TRUE") AS use_recomend_payment,
  COUNTIF(event_name = "click_recommend_food")  AS click_recommend_food, 
  COUNTIF(event_name = "click_payment" AND use_recommend_food = "TRUE")/COUNTIF(event_name = "click_recommend_food") AS recommend_cvr 
FROM log 
WHERE is_meet_min_order_price = 'False' 
GROUP BY event_date

 

말씀해주신 것처럼 서브쿼리로 푸셔도 상관없고, 어떤 DB를 쓰느냐에 따라 성능 차이가 있긴 하지만, 데이터 웨어하우스 관점에선 비슷합니다.

서브 쿼리를 사용한 이유는 가독성 관점에서 더 보기 좋다고 판단해서 저렇게 풀었다고 보시면 될 것 같아요. 또한 이 데이터가 한번만 사용된다면 푸신 것처럼 쓰셔도 되는데, 나중에 재활용이 된다고 하면 제가 풀었던 쿼리의 FROM 절을 WITH 문으로 정의해서 계속 사용할 것 같아요. 쿼리의 구조를 더 명확하게 하고 나누기 위해 서브쿼리를 사용했다고 보셔도 괜찮습니다

  • 정리 : 지금 푸신 방법으로 해도 정상적으로 동작할 것. 저는 더 복잡한 상황을 대비해 서브쿼리를 사용했는데, 지금 상황엔 서브쿼리를 사용하지 않고 그냥 쓰는게 더 가독성 관점에선 좋을 수도 있을거에요. 푸신 문제도 잘 푸셨다고 생각하시면 되어요!

제가 조만간 빅쿼리 SQL 강의를 출시할 예정인데 그 때 더 자세한 설명을 할 예정이에요-!

orchid Y님의 프로필 이미지
orchid Y
질문자

아하! 이해됐습니다

다음에 질문 남길 때는 코드블럭 활용해서 좀 더 가독성 있게 남겨볼게요!

얼른 빅쿼리 강의 듣고 싶어요 ㅎㅎ

감사합니다!

orchid Y님의 프로필 이미지
orchid Y

작성한 질문수

질문하기