해결된 질문
작성
·
199
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 강의를 출시할 예정인데 그 때 더 자세한 설명을 할 예정이에요-!
아하! 이해됐습니다☺
다음에 질문 남길 때는 코드블럭 활용해서 좀 더 가독성 있게 남겨볼게요!
얼른 빅쿼리 강의 듣고 싶어요 ㅎㅎ
감사합니다!