Algorithm/Programmars
[SQL] 입양 시각 구하기(2) - 프로그래머스[Lv.4]
mopipi
2024. 1. 29. 16:38
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/59413
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
WITH RECURSIVE H AS (
SELECT 0 AS HR
UNION ALL
SELECT HR + 1
FROM H
WHERE HR < 23)
SELECT H.HR HOUR, IFNULL(T.CNT, 0) COUNT
FROM H
LEFT JOIN (SELECT DATE_FORMAT(DATETIME, '%H') HOUR, COUNT(*) CNT
FROM ANIMAL_OUTS
GROUP BY DATE_FORMAT(DATETIME, '%H')) T
ON H.HR = T.HOUR
ORDER BY H.HR;
💡 WITH RECURSIVE 구문 활용, IFNULL( ) 활용
풀이
- 기존 테이블에서 시간 대 별로 데이터의 개수를 뽑아서 테이블 T를 만든다
- 이전 단계 문제와 동일하게, 날짜에서 시간만 출력하기 위해 FORMAT %H 활용 => GROUP BY 기준으로 사용
- T에 없는 날짜들도 최종 출력해야 함 (디폴트 0으로)
- 0 ~ 23 까지 값을 갖고있는 테이블 H 를 생성한 뒤, LEFT JOIN 함
- 0 ~ 23의 더미 테이블 생성하기 위해 WITH RECURSIVE 구문 사용
- H의 값 중 T에 없는 값일 경우 NULL값을 0을 디폴트로 출력하게 → IFNULL(COUNT, 0)
- 0 ~ 23 까지 값을 갖고있는 테이블 H 를 생성한 뒤, LEFT JOIN 함
💬 WITH RECURSIVE에 대해 새롭게 알게됨! 시간 말고도 더미 날짜 테이블도 생성 가능하니 잊지말고 사용할 것!
반응형