[프로그래머스/SQL] 입양 시각 구하기(2)

Rachaen·2023년 8월 15일
0

SQL 너란 애는 뭐니

목록 보기
3/4

입양 시각 구하기(2)

실패

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;
  1. SET @HOUR = -1: 변수 @HOUR를 초기화한다.
  2. @HOUR := @HOUR + 1: SELECT문이 실행될 때마다 @HOUR의 값을 1씩 증가시킨다.
  3. WHERE @HOUR < 23: 23시까지의 값을 출력하도록 조건을 설정한다.
  4. 내부 SELECT문: 각 시간대별로 ANIMAL_OUTS 테이블에서 DATETIME의 시간과 일치하는 데이터의 수를 집계한다.

SET과 사용자 정의 변수

SQL에서 SET은 특정 변수에 값을 할당하는 데 사용된다. MySQL에서는 @ 접두사를 사용하여 사용자 정의 변수를 생성하고 이를 SET을 통해 초기화하거나 값 할당이 가능하다

SET @myVar = 'Hello, World!';
SELECT @myVar;

:= 연산자

MySQL에서 :=는 변수에 값을 할당하는 연산자이다. 주로 SET 명령어 없이 SELECT문 내에서 변수 할당을 할 때 사용된다.

@HOUR := @HOUR + 1

  1. @HOUR + 1: 현재 @HOUR 변수의 값에 1을 더한다
  2. := 연산자를 사용하여 계산된 값을 @HOUR 변수에 할당한다.

쿼리가 반복 실행될 때마다 @HOUR의 값이 1씩 증가한다.

profile
개발을 잘하자!

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

큰 도움이 되었습니다, 감사합니다.

답글 달기

관련 채용 정보