자유

소마 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은 대단하지 않아!ㅠㅠㅠ