더북(TheBook)

3 정답

SELECT years 연도,
       SUM(CASE WHEN months BETWEEN 1 AND 3 THEN sal_amt ELSE 0 END) 1분기,
       SUM(CASE WHEN months BETWEEN 4 AND 6 THEN sal_amt ELSE 0 END) 2분기,
       SUM(CASE WHEN months BETWEEN 7 AND 9 THEN sal_amt ELSE 0 END) 3분기,
       SUM(CASE WHEN months BETWEEN 10 AND 12 THEN sal_amt ELSE 0 END) 4분기
  FROM
      (SELECT YEAR(release_date) years,
              MONTH(release_date) months,
              SUM(sale_amt) sal_amt
         FROM box_office
        WHERE YEAR(release_date) IN (2018, 2019)
        GROUP BY 1, 2
      ) a
GROUP BY 1
ORDER BY 1;

실행결과

해설 먼저 box_office 테이블에서 2018년과 2019년 개봉 영화를 조회하는데, YEAR()MONTH() 함수로 개봉연도와 월을 구합니다. 그리고 이를 GROUP BY 절에 명시한 후 SUM() 함수로 매출액 합계를 구합니다. 이렇게 하면 연도별, 월별로 매출액 합계가 조회됩니다. 그런 다음 이 쿼리를 파생 테이블로 만듭니다. 메인쿼리에서는 파생 테이블에서 연도인 years를 추출하고, CASEBETWEEN... AND 연산자로 월을 나타내는 months 값이 각 분기에 속한 월이면 매출액 합계인 sal_amt를, 아니면 0을 반환하도록 작성합니다. 4분기까지 있으므로 CASE 연산자가 들어간 표현식을 4개 작성합니다. 마지막으로 years를 GROUP BY 절에 명시하고 각 CASE 연산자가 포함된 표현식 전체를 SUM() 함수의 매개변수로 넘기면 연도별로 각 분기의 매출액을 구할 수 있습니다.

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