티스토리 뷰

Lv4. 입양 시각 구하기(2)

문제

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

실행 결과

실패한 풀이 

SELECT HOUR(DATETIME), COUNT(*) FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);

단순하게 GROUP BY 쓰면 되지 않나 싶었지만...

단순하게 풀면, 실행결과와 다른 결과가 나오는 것을 확인할 수 있음! 내 풀이 경우에는, COUNT가 0이상인 것, 즉 데이터가 존재하는 시간대만 출력되게 된다. 하지만, 문제에서 요구하는 건 0시부터 23시까지 모든 시간대를 다 출력하도록 하는 것이다!

여기서, 데이터에 존재하지 않는 시간대를 어떻게 만들면 좋을까 고민했지만 답이 나오지 않았고!

 

풀이1 : SET 이용해서 사용자 지정 변수 

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;

- 사용자 지정값 hour 선언, 0시부터 시작되어야 하므로 -1로 시작해서 점점 1씩 증가하는 형태로!

- 0시부터 23시까지 돌면서, ANIMAL_OUTS에 있는 시간대는 COUNT(*)로 개수 집계하도록 설정

- WHERE문 이용해서 23시까지만 hour값이 되도록 설정해주기!

 

풀이2: 재귀함수이용 

- 다른 사람들 풀이보니까 재귀함수를 이용하는 방법도 있던데 어려워서 2회독할 때 도전해봐야겠다!