SQL 2회차 과제
/ 1번 문제 /
WITH tb AS(
SELECT
ord.order_id,
cust.customer_unique_id
FROM olist.olist_orders as ord
LEFT JOIN olist.olist_customers as cust
ON ord.customer_id = cust.customer_id
)
SELECT
COUNT(DISTINCT order_id) as 총주문수,
COUNT(DISTINCT customer_unique_id) as 주문고객수,
COUNT(DISTINCT order_id) / COUNT(DISTINCT customer_unique_id) as 주문빈도
FROM tb
;
/ 2번문제 /
WITH tb AS(
SELECT
TIMESTAMP_TRUNC(ord.order_approved_at, week(MONDAY)) as ord_ts,
EXTRACT(WEEK(MONDAY) FROM ord.order_approved_at) as week_num,
ord.order_id,
cust.customer_unique_id
FROM olist.olist_orders as ord
LEFT JOIN olist.olist_customers as cust
ON ord.customer_id = cust.customer_id
)
, tb2 AS (
SELECT
ord_ts,
week_num,
COUNT(DISTINCT order_id) as 총주문수,
COUNT(DISTINCT customer_unique_id) as 주문고객수,
COUNT(DISTINCT order_id) / COUNT(DISTINCT customer_unique_id) as 주문빈도
FROM tb
GROUP BY 1, 2
ORDER BY ord_ts
)
SELECT
SUM(총주문수) AS 총주문수,
SUM(주문고객수) AS 주문고객수,
SUM(주문빈도) AS 주문빈도
FROM tb2
/ 1번의 결과와 2번의 결과가 서로 다르게 나타남 /
2개의 결과가 서로 다른이유는 중복값 때문이다.
1월달에 a,b,c라는 사람이 2월달에 a,b라는 사람이 상품을 구매했다고 하면
1번째 방식으로 계산을 하게되면 총 a,b,c 3명의 사람으로 계산이 되지만
2번째 방식으로 계산을 하게되면 1월달에 a,b,c 3명 + 2월달에 a,b 2명 해서 5명으로 계산되서
주문고객수가 달라지게 되고 , 그에 따른 주문빈도도 당연히 달라지게 된다.