SQL - CTE를 이용해 Date Series 만들기

2023. 8. 12. 22:50DATA PROGRAMMING/SQL

문제

 

 

코드

 

-- 코드를 입력하세요
WITH RECURSIVE allDates (date) AS
(
    SELECT '2004-11-01'
        UNION ALL
    SELECT date + INTERVAL 1 DAY
    FROM allDates
    WHERE date + INTERVAL 1 DAY <= '2004-11-30'
)
SELECT allDates.date,  dayname(allDates.date) '요일' , COUNT(orderNo) AS noOfOrders
FROM allDates LEFT JOIN s_orders o ON allDates.date = o.orderdate
WHERE dayname(allDates.date) NOT IN ('Saturday', 'Sunday')
GROUP BY allDates.date
ORDER BY 1

나의 해결 방법

 

1. 재귀 CTE 기능을 활용해 Date Series를 생성해준다

2. 조인을 활용해 만들어 놓은 Date Series와 s_orders 테이블을 연결해 주는데 이때, 주문이 없는 날도 포함해야 하기 때문에 LEFT JOIN을 활용해서 연결해 주었다.

3. WHERE 절을 통해 요일이 'Saturday', 'Sunday'인 행은 지워준다.