SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
ORDER BY HOUR

내가 할 수 있는대로 짜 보았는데 0시 - 23시까지 빠짐없이 출력하는 방법을 몰랐다. 그래서 다른 글들을 찾아보았다.
SET @HOUR = -1;
SELECT (@HOUR := @HOUR + 1) AS HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
SET @HOUR = -1: 변수 @HOUR를 초기화한다.@HOUR := @HOUR + 1: SELECT문이 실행될 때마다 @HOUR의 값을 1씩 증가시킨다.WHERE @HOUR < 23: 23시까지의 값을 출력하도록 조건을 설정한다.SELECT문: 각 시간대별로 ANIMAL_OUTS 테이블에서 DATETIME의 시간과 일치하는 데이터의 수를 집계한다.SQL에서 SET은 특정 변수에 값을 할당하는 데 사용된다. MySQL에서는 @ 접두사를 사용하여 사용자 정의 변수를 생성하고 이를 SET을 통해 초기화하거나 값 할당이 가능하다
SET @myVar = 'Hello, World!';
SELECT @myVar;

MySQL에서 :=는 변수에 값을 할당하는 연산자이다. 주로 SET 명령어 없이 SELECT문 내에서 변수 할당을 할 때 사용된다.
@HOUR + 1: 현재 @HOUR 변수의 값에 1을 더한다:= 연산자를 사용하여 계산된 값을 @HOUR 변수에 할당한다.쿼리가 반복 실행될 때마다 @HOUR의 값이 1씩 증가한다.
큰 도움이 되었습니다, 감사합니다.