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;
처음에는 아래와 같이 코드를 작성했다.
SELECT HOUR(DATETIME), COUNT(HOUR(DATETIME))
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)
이렇게 코드를 작성하면
HOUR(DATETIME) COUNT(HOUR(DATETIME))
7 3
8 1
9 1
10 2
11 13
12 10
......
시간이 있는 부분만 출력된다. 맞긴 맞는데 답에서는 0시부터 23시까지 모두 구하라고 했기 때문에 틀렸다.
여기서 'SET' 을 사용해야 한다.
: mysql 변수 사용
SET @변수명 = 변수값; SET @변수이름 := 변수값
-- 변수 선언, 값 대입
SELECT @변수이름; SELECT @변수이름 := 대입값
-- 변수 출력
-> SET 이외의 명령문에서는 =가 비교연산자로 취급되기 때문에 SELECT로 변수를 선언하고 값을 대입할 때는 :=를 사용한다.
-- 변수를 먼저 선언한다.
SET @hour = -1;
SELECT (@hour := @hour + 1) AS HOUR,
-- @hour := @hour + 1 을 통해서 0부터 계속 생성된다.
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) AS COUNT
-- 위에서 생성된 @hour를 통해 HOUR(DATETIME) = @hour인 값을 센다.
FROM ANIMAL_OUTS
WHERE @hour < 23;
-- @hour의 범위를 설정해주는 것