SQL/LeetCode
LeetCode / 1321. Restaurant Growth / MySQL / Medium / FROM절 서브쿼리 , Window 함
박혀노
2023. 12. 24. 09:29
728x90
📚문제
📝풀이
# 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