TIL 172일차: 재귀 CTE
2024. 6. 28. 10:33ㆍ회고/TIL(매일)
✏️도전한 점
1. 아티클 스터디 및 요약
2. 쿼리 스터디 준비하기
01 아티클 스터디
🔎아티클 스터디: GPT 발전 역사 돌아보기
01 오늘의 아티클 ‘GPT-5’를 기다리며: GPT 발전 역사 돌아보기 | 요즘IT인공지능 기술은 우리 삶과 사회에 혁명적인 변화를 불러왔으며, 그중 하나가 GPT(Generative Pre-trained Transformer)입니다. GPT는
specialda.tistory.com
02 알쿼리즘 스터디
나의 코드
WITH RECURSIVE hours AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1
FROM hours
WHERE HOUR < 23
)
SELECT h.HOUR, COALESCE(a.COUNT, 0) AS COUNT
FROM hours h
LEFT JOIN (
SELECT DATE_FORMAT(DATETIME, '%H') AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY DATE_FORMAT(DATETIME, '%H')
) a ON h.HOUR = a.HOUR
ORDER BY h.HOUR;
- 'WITH RECURSIVE hours AS' 절은 Common Table Expression (CTE)을 사용하여 0부터 23까지의 숫자를 생성하는 재귀적인 쿼리이다.
- 'WHERE HOUR < 23'은 재귀 종료 조건이다. HOUR 값이 23보다 작을 때만 새로운 행을 생성한다.
- 마지막 실행은 'SELECT 22 + 1 FROM hours WHERE HOUR < 23' → HOUR = 23가 된다.
팀원 코드
# 재귀 CTE
WITH RECURSIVE hh AS
(
# 0으로 시작하는 HOUR 칼럼 만들기
SELECT 0 HOUR
UNION ALL
SELECT HOUR + 1
FROM hh
# HOUR 가 22인 경우까지 제한
WHERE HOUR < 23
)
SELECT hh.HOUR,
COUNT(a.ANIMAL_ID) COUNT
FROM hh
LEFT JOIN ANIMAL_OUTS a ON hh.HOUR = HOUR(a.DATETIME)
GROUP BY hh.HOUR
ORDER BY hh.HOUR
- LEFT JOIN 한 ANIMAL_OUTS의 ANIMAL_ID를 그대로 COUNT해서 바로 사용했다.
- 이를 위해서 재귀 테이블 HOUR과 HOUR(a.DATETIME)이 같다는 조건이 필요하다.
03 문제 링크
코딩테스트 연습 - 입양 시각 구하기(2) | 프로그래머스 스쿨 (programmers.co.kr)
✏️ 깨달은 점
1. HOUR 함수로 DATE_FORMAT을 대체하였음.
2. 서브쿼리 필요 없이 바로 COUNT를 사용할 수 있음.
'회고 > TIL(매일)' 카테고리의 다른 글
TIL 174일차: 데이터 분석 Q&A (0) | 2024.07.02 |
---|---|
TIL 173일차: ADsP 자격시험 신청, 강의 수강 (0) | 2024.07.01 |
TIL 171일차: 프로세스 마이닝, 초도 배분 문제 해결 (0) | 2024.06.27 |
TIL 170일차: Let's think step by step, 소셜 네트워크 분석 (0) | 2024.06.26 |
TIL 169일차: 코드훈련 재도전 (0) | 2024.06.25 |