4 정답
WITH basis AS
(SELECT MONTH(release_date) months, SUM(sale_amt) tot_amt
FROM box_office
WHERE YEAR(release_date) = 2019
GROUP BY 1
),
finals AS
(SELECT months, tot_amt,
LAG(tot_amt) OVER (ORDER BY months) pre_month_amt
FROM basis
)
SELECT months, tot_amt,
ROUND((tot_amt - pre_month_amt) / pre_month_amt * 100, 2) rates
FROM finals
ORDER BY 1;
실행결과
해설 먼저 box_office 테이블에서 2019년 개봉 영화의 월별 총 매출액을 구하는 부분을 집계 쿼리로 작성하고 이를 basis란 CTE 서브쿼리로 만듭니다. 두 번째로 basis를 참조해 이전 월의 총 매출액을 가져오도록 LAG() 함수로 pre_month_amt라는 가상 칼럼을 계산하는 두 번째 CTE 서브쿼리를 finals라는 이름으로 만듭니다. 마지막으로 메인쿼리에서 finals를 조회하는데, 전월 대비 증감률을 (당월 매출 – 전월 매출) / 전월 매출 × 100으로 구합니다. 이때 ROUND() 함수로 소수점 아래 둘째 자리까지 보이도록 반올림합니다.