더북(TheBook)

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() 함수로 소수점 아래 둘째 자리까지 보이도록 반올림합니다.

본문으로

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.