반응형
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한 값을 얻을 수 있다.
반응형
'Back-End > SQL' 카테고리의 다른 글
[프로그래머스 SQL 고득점 Kit] 중성화 여부 판단하기 (0) | 2022.03.04 |
---|---|
[프로그래머스 SQL 고득점 Kit] NULL 처리하기 (0) | 2022.03.04 |
[프로그래머스 SQL 고득점 Kit] 입양 시각 구하기(1) (0) | 2022.03.04 |
[프로그래머스 SQL 고득점 Kit] 동명 동물 수 찾기 (0) | 2022.03.04 |
[프로그래머스 SQL 고득점 Kit] 중복 제거하기 (0) | 2022.03.04 |