코드 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;