문제 풀이/프로그래머스 알고리즘, SQL

[프로그래머스 SQL] 입양 시각 구하기(2) group by, recursive

dev_beomgeun 2021. 2. 26. 19:03
728x90

programmers.co.kr/learn/courses/30/lessons/59413

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

평범하게 count 후 group by를 하면 데이터가 7~19시까지밖에 출력이 되지 않는다.

하지만 문제에서는 데이터가 없어도 0~23시까지의 데이터를 출력하라는 요청이다.

 

따라서 WITH RECURSIVE 구문을 통해 0~23까지의 HOUR을 가진 테이블을 만든 후

그 테이블과 JOIN을 해서 빈 HOUR을 채워주었다.

 

programmers.co.kr/questions/11910의 질문글에 대한 어떤 고수분의 솔루션을 보고 풀 수 있었다.

WITH RECURSIVE
    cte AS
    ( SELECT 0 AS HOUR
        UNION ALL
        SELECT HOUR + 1
        FROM cte
        WHERE HOUR < 23)

SELECT cte.HOUR, COUNT(ANIMAL_OUTS.animal_id)
FROM cte
LEFT JOIN ANIMAL_OUTS
on cte.HOUR = HOUR(ANIMAL_OUTS.DATETIME)
GROUP BY cte.hour
ORDER BY cte.hour

표를 만들어주고 LEFT JOIN 후 GROUP BY를 통해 각각 매칭되었지만 흩어져 있는 시간 정보를 묶어준다.

728x90