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
'SQL > LeetCode' 카테고리의 다른 글
LeetCode / 1084. Sales Analysis III / MySQL / Easy (1) | 2023.12.28 |
---|---|
LeetCode / 607.Sales Person / MySQL / Easy (0) | 2023.12.27 |
LeetCode / 180. Consecutive Numbers / MySQL / Medium / OVER, LAG,LEAD (0) | 2023.12.21 |
LeetCode / 185. Department Top Three Salaries / MySQL / Hard (0) | 2023.12.20 |
LeetCode 1484. Group Sold Products By The Date / MySQL / Easy / GROUP_CONCAT (0) | 2023.12.18 |