DATA PROGRAMMING/SQL
SQL - CTE를 이용해 Date Series 만들기
허니리즘
2023. 8. 12. 22:50
문제
코드
-- 코드를 입력하세요
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'인 행은 지워준다.