SQL WITH RECURSIVE & 프로그래머스 다 풀기 !

On a regular basis·2021년 10월 27일
0
post-thumbnail

WITH RECURSIVE

WITH RECURSIVE 테이블명 AS(
SELECT 초기값 AS 컬럼별명1
UNION ALL
SELECT 컬럼별명1 계산식 FROM 테이블명 WHERE 제어문
  1. 메모리 상에 가상의 테이블 저장하기 (테이블명)
  2. 재귀 쿼리를 이용해 실제로 테이블을 생성하거나 데이터삽입(INSERT)하지 않아도 테이블 생성 가능 !

✔️ 예를 들어,

with recursive cte as(
select 1 as h
union all
select h+1 from cte where h<5)

select * from cte;
  • 이 경우 h(컬럼)이 초기값 1부터 제어문에 해당하는 5까지의 데이터를 갖는 가상테이블 (cte) 생성 된 것.

WITH RECURSIVE TIME AS(
SELECT 0 AS h
    UNION ALL
    SELECT h+1 FROM TIME WHERE h < 23)
    
SELECT h, COUNT(HOUR(DATETIME)) AS 'COUNT'
FROM TIME LEFT JOIN ANIMAL_OUTS ON (h=HOUR(DATETIME))
GROUP BY h

# 1. time이라는 가상 테이블을 먼저 만들고,
# 2. 별명에 select문을 subquery로 넣는다.
# 3. union all을 통해 두개의 테이블 연결(중복제거)
# 4. h를 초기값 0으로 두고 이걸 23까지로 조건을 주며 h+1로 증가시키는 것.
# 5. h 컬럼값과 datetime에서 시간을 빼와서 count해주고,
# 6. animal_outs를 갖다가 붙여줌!

ㅎㅎㅎㅎ
with recursive 를 몰라서 group by having set 써보고 난리 ^^
아 너무 재밌는데 삽질하다가 새로운 문법으로 풀 수 있는거라고 알게되면 쫌 멘붕온다 !
시간별 입양이 일어나지 않을 때를 고려해줘야하는데 그걸 새로운 가상 테이블을 통해 해결 할 수 있는거당...
그치만.. 오늘 또 하나 배웠당 ! 💙

🍇 별표 백개 프로그래머스 다 풀어따... 쫀멋 ㅠㅠ

  • 요즘 과제랑 면접 너무 정신없어서 첨 푼건 꽤 됐는데 이제야 다 풀었다. 근데 진짜 내가 명령어 만드는대로 추출되는거 넘 신기 재밌어...🍋

🍇 SQLD 자격증 신청 !

  • 친한 동생이랑 SQLD 자격증 시험을 신청했다 ! 11월 20일에 보는건데 사실 뭐 그게 얼마나- 누가 그걸 그렇게까지- 인정해주겠느냐마는 database를 사랑하는 내 마음을 쪼오금이나마 표현해보고자 신청했당...
  • 백엔드 개발자가 되려고 아듕바듕 대는 내가 너무 멋찐 것........후^^ 너어무 화이팅!!!
profile
개발 기록

0개의 댓글