Back-End/SQL

[프로그래머스 SQL 고득점 Kit] 입양 시각 구하기(2)

koh1018 2022. 3. 4. 20:26
반응형

 

 

 

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
ORDER BY HOUR asc

쿼리문에서 로컬 변수를 활용하는 문제다.

SET을 사용하면 변수를 정의할 수 있다.

@가 붙은 것은 변수라고 생각하면 된다. 즉, hour는 초기값이 -1인 변수이다.

:=은 비교 연산자 =과 혼동을 피하기 위한 대입 연산자이다.

SELECT (@hour := @hour + 1)은 @hour의 값에 1씩 증가시키며 SELECT 문 전체를 실행하게 된다.

이때, 처음 hour의 값이 -1이므로 0부터 시작한다. 그리고 WHERE문에 따라 22일때까지 증가하고 마지막에 +1이 되므로 hour는 0부터 23까지 생성된다.

 

그리고 이제 각각에 대한 COUNT 값이 필요하다.

COUNT(*)는 해당되는 모든 레코드의 수를 구한다.

WHERE HOUR(DATETIME) = @hour을 통해 0부터 23까지 증가하는 hour과 같은 HOUR(DATETIME)의 수를 COUNT한 값을 얻을 수 있다.

반응형