더북(TheBook)

코드 11-6은 box_office 테이블에서 2019년 1월에 날짜별로 몇 편의 영화가 개봉됐는지 조회합니다. 결과를 보면 1월 1일은 2편, 1월 3일은 13편이 개봉됐습니다. 1월은 31일까지 있지만, 1월 2일이나 1월 6일처럼 개봉한 영화가 없는 날은 결과에 나타나지 않으므로 31건이 아닌 24건만 조회됐습니다.

그런데 31건이 나오도록 조회하면 어떨까요? 1월 1일부터 1월 31일까지 31건을 조회하고 1월 2일이나 6일은 개봉된 영화가 없을 때는 cnt 칼럼에 0을 표시하면 날짜별 개봉 영화 편수를 파악하기 더 좋지 않을까요?

이런 경우 재귀 CTE로 1월 2일이나 6일처럼 box_office 테이블에 데이터가 없는 건에 대해 로우를 만들어내면 됩니다.

코드 11-7

WITH RECURSIVE cte1 AS
(SELECT MIN(DATE(release_date)) dates
   FROM box_office
  WHERE EXTRACT(YEAR_MONTH FROM release_date) = 201901
  UNION ALL
 SELECT ADDDATE(dates, 1)
   FROM cte1
  WHERE ADDDATE(dates, 1) <= '2019-01-31'
)
SELECT a.dates, COUNT(b.movie_name) cnt
  FROM cte1 a
  LEFT JOIN box_office b
    ON a.dates = b.release_date
 GROUP BY 1
 ORDER BY 1;
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.