본문 바로가기
취준/코팅 테스트

[LeetCode] - 1321. Restaurant Growth

by 소복소복뚜벅뚜벅 2024. 4. 3.

문제 

You are the restaurant owner and you want to analyze a possible expansion (there will be at least one customer every day).

Compute the moving average of how much the customer paid in a seven days window (i.e., current day + 6 days before). average_amount should be rounded to two decimal places.

Return the result table ordered by visited_on in ascending order.

 

 

문제 풀이 

WITH df AS(
    SELECT DISTINCT visited_on 
        ,  SUM(amount) OVER (ORDER BY visited_on RANGE BETWEEN INTERVAL 6 DAY PRECEDING AND CURRENT ROW) AS 'amount'
        ,  MIN(visited_on) OVER () 1st_date 
    FROM Customer 
) 

SELECT visited_on 
	,  amount 
    ,  ROUND(amount/7,2) AS average_amount 
FROM df 
WHERE visited_in >= 1st_date + 6

 

서브 쿼리를 이용해서 문제를 풀어야 한다. 

 

(1) 윈도우 함수를 이용하여, 현재 날짜에서 6일 이전 날짜에 해당하는 amount의 합을 구한다. 

(2) visited_on의 최소값을 각 행에 표시하게 한다. => 이후 WITH 절을 이용하여 서브쿼리를 만든다. 

 

(3) 6일 이전의 값을 구해야 하므로 1월 7일 부터 더하기가 가능하다 이러한 조건을 WHERE 문을 이용해서 만들었다. 

(4) WITH 절에서 구한 amount를 7로 나누면, 평균 amount의 값이 나오게 된다. 

 

오답 이유 

처음에, ROW BETWEEN 6 PRECEDING  AND CURRENT ROW를 이용했지만 한날짜의 두개의 행이 있을 경우 값이 두개가 나오므로, 오류가 발생했다.