Lv4. 온라인 쇼핑몰의 Stickiness
https://solvesql.com/problems/stickiness-of-shoppingmall/
SELECT d.order_date AS dt
, COUNT(DISTINCT d.customer_id) AS dau
, COUNT(DISTINCT w.customer_id) AS wau
, ROUND(COUNT(DISTINCT d.customer_id) / COUNT(DISTINCT w.customer_id),2) AS stickiness
FROM records AS d
LEFT JOIN records AS w ON w.order_date BETWEEN DATE_ADD(d.order_date, INTERVAL -6 DAY) AND d.order_date
WHERE d.order_date BETWEEN '2020-11-01' AND '2020-11-30'
GROUP BY d.order_date
ORDER BY dt
❗고객 수 이므로 DISTINCT 사용해서 중복을 배제하고 집계
❗LEFT JOIN 하면서 조인 조건으로 날짜 기간 (BETWEEN) 사용
❗DATE_ADD(, INTERVAL -6 DAY) = DATE_SUB(, INTERVAL 6 DAY)
❗WHERE 절에 BETWEEN 사용해서 날짜 조건 충족
❗출력 예시에는 11-06부터지만 실제 제출은 11-01 부터 이기 때문에 테이블을 따로 만들어서 WHERE 절로 11월 기간을 묶으면 오류가 남
+) 아이디어 1
- DAU, WAU 테이블을 각각 만들어서 조인
- ❗출력 예시에는 11-06부터지만 실제 제출은 11-01 부터 이기 때문에 테이블을 따로 만들어서 WHERE 절로 11월 기간을 묶으면 오류가 남
- DAU는 만들 수 있는데 WAU는 어떻게 만드나?
- DAU 테이블을 셀프 조인해서 기간 만들어보자
- ❗이상하게 오류가 남. JOIN하는 기간의 문제
'SQL > SQL | SOLVESQL 코딩테스트' 카테고리의 다른 글
SQL | SOLVESQL 코딩테스트 : Lv5. (STRING/DATE) (3) | 2024.12.10 |
---|---|
SQL | SOLVESQL 코딩테스트 : Lv5. (JOIN/UNION) (2) | 2024.12.09 |
SQL | SOLVESQL 코딩테스트 : Lv4. (CASE/IF) (1) | 2024.12.04 |
SQL | SOLVESQL 코딩테스트 : Lv4. (WINDOWFUNCTION) (1) | 2024.12.03 |
SQL | SOLVESQL 코딩테스트 : Lv4. (JOIN/UNION) (0) | 2024.12.02 |