티스토리 뷰

MySQL

[4] WITH RECURSIVE

up_one 2025. 7. 15. 11:00

WITH RECURSIVE 문은 SQL 문법의 재귀 기법의 역할을 존재합니다. 다른 언어의 문법과 마찬가지로, 재귀를 시작할 지점과 마무리할 지점을 설정하는 것이 중요합니다.

WITH RECURSIVE example AS (
	SELECT 1 AS n
    	UNION ALL
    	SELECT n+1 FROM example
    	WHERE n<4
)

SELECT * FROM example
  1. 가상의 테이블 (example) 지정
  2. non recursive 문장 생성 (첫 번째 반복에만 실행
    • SELECT 1 AS n : 1부터 재귀문을 시작
  3. UNION 후 recursive 문장 실행
  4. WHERE 문을 활용한 재귀 종료 시점 지정

1. WITH RECURSIVE 예시

https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

각 시간대 별 입양 건수 조회 -> 시간을 0 ~ 23으로 모두 출력

※ 주의) 단순히 GROUP BY로 할 경우, 결과가 테이블에 존재하는 시간만 조회

 

Solution)

  1. 0 ~ 23의 hour을 가진 가상 테이블 지정 (HOURS)
  2. ANIMAL_OUTS와 HOUR(DATETIME)을 기준으로 LEFT JOIN
  3. HOURS의 HOUR을 기준으로 그룹화
  4. NULL값인 경우 0으로 값을 설정 : IFNULL(COUNT(HOUR(DATETIME)), 0)
WITH RECURSIVE HOURS AS (
	SELECT 0 AS hour
    UNION ALL
    SELECT hour+1 FROM HOURS
    WHERE hour < 23
)

SELECT a.hour, IFNULL(COUNT(HOUR(b.DATETIME)),0) AS COUNT
FROM HOURS AS a LEFT JOIN ANIMAL_OUTS AS b
ON a.hour = HOUR(b.DATETIME)
GROUP BY a.hour ORDER BY a.hour;

'MySQL' 카테고리의 다른 글

[3] WITH 문 연습  (0) 2025.04.08
[2] 서브쿼리(Subquery)  (0) 2025.01.08
[1] SQL 코딩테스트 문법 정리  (0) 2025.01.05
TAG more
글 보관함
최근에 올라온 글