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

    본문으로

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