[SQL] 입양 시각 구하기(2)

이말감·2022년 2월 3일
0

SQL

목록 보기
6/14

문제

링크

코드

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' 을 사용해야 한다.

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의 범위를 설정해주는 것
profile
전 척척학사지만 말하는 감자에요

0개의 댓글