「SQL초급떼기
코딩테스트 연습GROUP BY입양 시각 구하기(2)
DayGo
2023. 4. 2. 17:28
https://school.programmers.co.kr/questions/39492
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해당 해설이 좋아서 공유!!!!
나는 그냥 이렇게 했는데
select date_format(datetime, '%H') AS HOUR, HOUR(DATETIME) AS HOUR2,COUNT(*) AS CNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR BETWEEN 0 AND 23
ORDER BY HOUR
아래 정답을 내신 고수는
WITH문을 써서 서브쿼리 2개를 수행!!!
RECURSIVE는 처음 보는 구문이다!!!!!!
WITH RECURSIVE tb1 AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR+1 FROM tb1 WHERE HOUR < 23
) , tb2 AS (
SELECT HOUR(DATETIME) AS HOUR
, COUNT(DISTINCT ANIMAL_ID) AS CNT
FROM ANIMAL_OUTS
GROUP BY HOUR
)
SELECT tb1.HOUR
, CASE WHEN tb2.CNT IS NULL THEN 0 ELSE CNT END AS CNT
FROM tb1
LEFT JOIN tb2 ON tb1.HOUR = tb2.HOUR
ORDER BY HOUR