솜이의 데브로그

프로그래머스 SQL ) 입양 시각 구하기(2) 본문

Algorithm/Programmers

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

somsoming 2022. 3. 19. 02:36

https://programmers.co.kr/learn/courses/30/lessons/59413

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

 

코딩테스트 연습 > GROUP BY > 입양 시각 구하기(2)

 

문제

보호소에서 몇시에 입양이 가장 활발하게 일어나는지 알아보는 문제.

0시부너 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성. 이 때 결과는 시간대 순으로 정렬해야 한다.

 

코드 (MySQL)

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

 

 

모든 시간대를 조회해야하는 문제로, '쿼리문에서 로컬 변수를 활용하는 문제'이다.

 

  • 위에서 SET 옆에 변수명과 초기값을 설정해야한다.
    • @가 붙은 변수는 프로시저가 종료되어도 유지된다.
  • @hour 은 초기값을 -1로 설정한다.
  • SELECT(@hour := @hour +1) 은 @hour의 값에 1씩 증가시키면서 SELECT 문 전체를 실행하게 된다.
  • 이 때 처음에 @hour 값이 -1 이므로, 처음에 0이 되어 저장된다.
    • @hour<23 일 때까지 @hour 값이 계속 +1 씩 증가한다.

 

이 때, := 는 비교연산자 = 와 혼동을 피하기 위한 '대입 연산자'이다!

 

 

쿼리문에서 로컬변수를 활용해본 적이 없어서 새로운 타입의 문제였다. SQL 에도 반복문처럼 1씩 더하며 실행하는것이 할 수 있다는게 신기했다.