728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아무리 생각해도 기존 테이블에 없는 0 ~ 23시를 어떻게 만들어되야할 지 몰라서 실눈 뜨고 풀이 보기 방법으로 풀이를 참고해 풀었다.
WITH RECURSIVE RC AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1
FROM RC
WHERE HOUR < 23
)
SELECT RC.HOUR, IFNULL(TIME_CNT.CNT, 0) AS COUNT
FROM RC LEFT OUTER JOIN (
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS CNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
) TIME_CNT ON RC.HOUR = TIME_CNT.HOUR
ORDER BY 1
WITH 문을 통해 테이블을 새로 만드는데, RECURSIVE를 통해 재귀를 사용해서 만든다.
위 RC 테이블은 HOUR 컬럼에 0~23까지 저장되어 있는 테이블이다.
참고 링크
[MYSQL] 📚 RECURSIVE (재귀 쿼리)
WITH RECURSIVE 문 (재귀 쿼리) 프로그래밍에서 재귀 함수를 들어봤듯이, SQL에서도 재귀 쿼리 기법이 존재한다. 다만 문법이 굉장히 해괴한데 우선 WITH RECURSIVE 쿼리문을 작성하고 내부에 UNION을 통해
inpa.tistory.com
728x90
'알고리즘 > SQL' 카테고리의 다른 글
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.07.16 |
---|---|
[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기 (0) | 2024.07.11 |
[프로그래머스] 특정 세대의 대장균 찾기 (0) | 2024.07.09 |
[프로그래머스] 우유와 요거트가 담긴 장바구니 (0) | 2024.07.01 |
[프로그래머스] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2024.06.27 |