SQL - CTE를 이용해 Date Series 만들기
2023. 8. 12. 22:50ㆍDATA 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'인 행은 지워준다.
'DATA PROGRAMMING > SQL' 카테고리의 다른 글
[SQL] GROUP BY, HVING 절 간단한 응용 (0) | 2023.08.24 |
---|---|
SQL - SQL로 PIVOT 테이블 만들기 (0) | 2023.08.14 |
재귀 조인의 사용 (0) | 2023.08.12 |
SQL 관계 대수식 작성 연습 (0) | 2023.07.11 |
[SQL] TIL 2- SQL 기본적인 함수들 익히기 (0) | 2023.03.09 |