자유
소마 sql공부 중 궁금증을 해결하기
배우겠습니다
2024. 3. 1. 23:35
cte를 만들고 leftjoin으로 문제에서 주어진 테이블데이터를 넣고 해당되는게 없으면 특정값(null,0)로 채워줘야하는 문제가 있었다.
with recursive time as (
select 1 as hour
union all
select hour + 1 from time where hour < 23
)
해당 time cte는 재귀적으로 hour이란 col에 0부터 23까지의 수가 들어간다.
하지만 연속적이지 않은 값이라면?
WITH RECURSIVE cte (loc) AS (
SELECT '서울'
UNION ALL
SELECT '경기'
UNION ALL
SELECT '제주'
UNION ALL
SELECT '인천'
)
이렇게 만들 수 있구나!
col이 여러개여도
WITH RECURSIVE locations (col1,col2,col3,...) AS (
SELECT val1,val2,val3,...
UNION ALL
SELECT ...
)
이런식으로 만들 수 있다.
위 time cte도
WITH RECURSIVE locations (hour) AS (
SELECT 0
UNION ALL
select hour + 1 from locations where hour < 23
)
SELECT *
FROM locations
이런식으로
with as는 대단해!
참고로 sql은 결국 못풀었다. sql은 대단하지 않아!ㅠㅠㅠ