[프로그래머스] Lv.4 입양 시각 구하기(2) MySQL

Janet·2023년 5월 9일
0

SQL

목록 보기
2/4

문제 설명

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_IDANIMAL_TYPEDATETIMENAMESEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.

NAMETYPENULLABLE
ANIMAL_IDVARCHAR(N)FALSE
ANIMAL_TYPEVARCHAR(N)FALSE
DATETIMEDATETIMEFALSE
NAMEVARCHAR(N)TRUE
SEX_UPON_OUTCOMEVARCHAR(N)FALSE

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

예시

SQL문을 실행하면 다음과 같이 나와야 합니다.

HOURCOUNT
00
10
20
30
40
50
60
73
81
91
102
1113
1210
1314
149
157
1610
1712
1816
192
200
210
220
230

본 문제는 Kaggle의 "Austin Animal Center Shelter Intakes and Outcomes"에서 제공하는 데이터를 사용하였으며 ODbL의 적용을 받습니다.


문제풀이

  • 변수 선언하는 명령어 SET을 이용하여 풀어야 하는 문제였다. (문제에서 요구하는 것은 0시~23시까지 모두 출력하는 것인데 기록된 입양 시간들에는 없는 시간대들이 있기 때문이다.)
  • SET 옆에 변수명과 초기값을 설정할 수 있다. SET @hour := -1;은 사용자 지정 변수 hour을 선언한 것으로, 초기값은 -1로 1씩 증가시켜 0시부터 출력된다.
    • cf. @가 붙은 변수는 프로시저가 종료되어도 유지된다.
    • cf. SQL 문법에서 :=은 비교 연산자 =과 혼동을 피하기 위한 대입 연산이다.
  • SELECT (@hour := @hour +1)@hour의 값에 1씩 증가시키면서 SELECT문 전체를 실행하게 된다.
  • WHERE @hour < 23 역시 +1되므로 24시까지 나타낸다.

✅ 답안

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;
profile
😸

0개의 댓글