https://leetcode.com/problems/restaurant-growth/?envType=study-plan-v2&envId=top-sql-50
날짜별 이동합과 이동평균을 구하는게 어려웟던 문제
1. 날짜를 만들어주고
2. 이동합을 구해주고
3. 이동평균을 구해주는 식으로 문제를 풀어야 한다
1. 날짜 만들어주기
SELECT visited_on
FROM customer c
WHERE visited_on >= (SELECT DATE_ADD(MIN(visited_on),INTERVAL 6 DAY) FROM customer)
GROUP BY visited_on
WHERE절 서브쿼리에 DATE_ADD(날짜, INTERVAL n DAY) 함수를 사용해서
테이블 내의 최소일자 + 6일 이상 인 날짜들에 대해서만 출력했다
2. 이동합 만들어주기
SELECT visited_on,
(
SELECT SUM(amount)
FROM customers
WHERE visited_on BETWEEN DATE_SUB(c.visited_on, INTERVAL 6 DAY) AND c.visited_on
) AS amount
FROM customer c
WHERE ... (1번쿼리)
SELECT절에 서브쿼리를 만들줬다.
이때 visited_on의 범위 설정을 위해 BETWEEN 과 DATE_SUB를 사용해주었다.
visited_on에 대해 GROUP BY를 하니까 자동으로 쪼개진다.
3. 이동평균 만들어주기
2번 쿼리와 유사하다
# Write your MySQL query statement below
SELECT visited_on, -- 날짜
(SELECT SUM(amount)
FROM customer
WHERE visited_on BETWEEN DATE_SUB(c.visited_on, INTERVAL 6 DAY)
AND c.visited_on) AS amount, -- 이동합
ROUND((SELECT SUM(amount) / 7
FROM customer
WHERE visited_on BETWEEN DATE_SUB(c.visited_on, INTERVAL 6 DAY)
AND c.visited_on),2) AS average_amount -- 이동평균
FROM customer c
WHERE visited_on >= (SELECT DATE_ADD(MIN(visited_on), INTERVAL 6 DAY) FROM customer) -- visited_ on >= 가장 이른 일자 + 6일
GROUP BY visited_on