728x90
programmers.co.kr/learn/courses/30/lessons/59413
평범하게 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
'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글
[프로그래머스] 여행경로 (문자열, BFS) [C++] (0) | 2021.03.12 |
---|---|
[프로그래머스] 등굣길 (DP, DFS) [C++] (0) | 2021.03.12 |
[프로그래머스 SQL] DATETIME에서 DATE로 형 변환 (DATE, DATE_FORMAT) (0) | 2021.02.23 |
[프로그래머스 SQL] 오랜 기간 보호한 동물(2) (date, innerJoin) (0) | 2021.02.23 |
[프로그래머스 SQL] 루시와 엘라 찾기(문자열 like, regexp) (0) | 2021.02.23 |