본문 바로가기

SQL/LeetCode

LeetCode / 1321. Restaurant Growth / MySQL / Medium / FROM절 서브쿼리 , Window 함

728x90

📚문제

출처 : LeetCode(https://leetcode.com/problems/restaurant-growth/)


📝풀이

# Write your MySQL query statement below
SELECT visited_on
     , amount
     , ROUND(amount/7,2) AS average_amount
FROM (SELECT DISTINCT visited_on
           , SUM(amount) OVER(ORDER BY visited_on RANGE BETWEEN INTERVAL 6 DAY PRECEDING AND CURRENT ROW) AS amount
      FROM Customer) AS sum_amount
WHERE visited_on >= (SELECT MIN(visited_on) FROM Customer) + INTERVAL 6 DAY

FROM절 서브쿼리와

WINDOW 함수를 활용

 

다른 방법도 많이 있지만

다음에 비슷한 문제를 푼다면 이런 방식으로 풀어나가는게 기억에 남을 것 같다

OVER()로 윈도우 함수를 시작하고

visited_on이 시계열 데이터이므로 ORDER BY로 정렬

그리고 RANGE BETWEEN함수로 범위 지정하여 그 기간 동안의 amount 계산

 

아래 링크에 윈도우 함수의 RANGE절에 대해서 쉽고 직관적으로 설명이 잘 되어있으니 참고

SQL 창 함수의 RANGE 절 : 5 가지 실제 예 | LearnSQL.com

 

 

💡링크 내용 요약

📌 WINDOW(OVER) 함수는 집계 함수를 더 강력하게 사용할 수 있게함. 특정 영역(윈도우) 내에서 계산될 수 있게함

📌 OVER함수는 주로 PARTITION이 기본 프레임이지만 ORDER BY를 사용할 때 기본 프레임은 다음과 같은 형태

ORDER BYRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

 

728x90