
우선 작성한 시간대별로 출력하는 코드를 작성했다.
SELECT DATE_FORMAT(DATETIME, '%H') HOUR, COUNT(ANIMAL_ID) COUNT
FROM ANIMAL_OUTS
GROUP BY 1
ORDER BY 1 ASC

조건에 따르면 0시부터 23시까지 나와야되는데 위의 코드는 결과에서 보이듯, 값이 있는 시간대만 출력한다.
CASE WHEN으로 0시부터 23시까지 다 짜고 싶지 않아서 방법을 찾아보았다.
WITH RECURSIVE 구문으로 가상테이블을 생성하여 0부터 23까지 증가하도록 만드는 방법이 있었다.
MySQL :: MySQL 8.4 Reference Manual :: 15.2.20 WITH (Common Table Expressions)
15.2.20 WITH (Common Table Expressions) A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that statement, possibly multiple times. The following disc
dev.mysql.com
[ 최종 답안 ]
WITH RECURSIVE TIME AS(
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1 FROM TIME
WHERE HOUR < 23
)
SELECT T.HOUR, COUNT(HOUR(A.DATETIME)) AS COUNT
FROM TIME T LEFT JOIN ANIMAL_OUTS A
ON T.HOUR = HOUR(A.DATETIME)
GROUP BY T.HOUR;
[ 참고한 블로그 ]
[MySql] 임시 테이블 1부터 10까지
쿼리를 짜다보면 기준 테이블로 1부터 10까지 혹은 1부터 100까지 있는 임시 테이블을 쿼리로 어떻게 짜야하나 싶을때가 있다. 그럴땐 with 문을 활용하자. 이렇게 해준다면 이렇게 깔끔한 결과가
allmana.tistory.com
[MYSQL] 📚 RECURSIVE (재귀 쿼리)
WITH RECURSIVE 문 (재귀 쿼리) 프로그래밍에서 재귀 함수를 들어봤듯이, SQL에서도 재귀 쿼리 기법이 존재한다. 다만 문법이 굉장히 해괴한데 우선 WITH RECURSIVE 쿼리문을 작성하고 내부에 UNION을 통해
inpa.tistory.com
[MySQL] 계층 쿼리 - WITH, WITH RECURSIVE 사용법
Common Table Expression (CTE) WITH 구문은 메모리 상에 가상의 테이블을 저장할 때 사용된다. RECURSIVE의 여부에 따라 재귀, 비재귀 두 가지 방법으로 사용 가능하다. WITH [RECURSIVE] TABLE명 AS ( SELECT - # 비반
horang98.tistory.com
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] ad 제거하기 (JAVA/ 자바) (2) | 2025.07.24 |
|---|---|
| [프로그래머스] 자동차 대여 기록에서 대여중/ 대여 가능 여부 구분하기 (MySQL) (2) | 2025.05.18 |
| [프로그래머스] 약수의 개수와 덧셈 (JAVA/ 자바) (1) | 2025.04.01 |
| [프로그래머스] 수박수박수박수박수박수? (JAVA/ 자바) (2) | 2025.03.30 |
| [프로그래머스] 가운데 글자 가져오기 (JAVA/ 자바) (1) | 2025.03.29 |