Seung's Learning Record

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

프로그래밍/SQL

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

70_0ewd 2024. 2. 22. 18:46

소요시간 :  19분
사용한 풀이법 : SET, 서브쿼리, GROUP BY


풀이 과정

1. 0-23시까지 모든 시간을 표시하기 위한 @hour 변수 선언
2. -1로 초기값을 준 뒤, +1을 해가며 hour이 23이 될 때 까지 진행
3. 서브쿼리에선 datetime의 시각이 hour와 동일한 경우에 그룹화 하여 카운트를 진행

작성 코드

set @hour := -1;
select (@hour := @hour+1) as HOUR,
ifnull((select count(animal_id)
        from animal_outs
        where hour(datetime) = @hour
        group by hour),0) as COUNT
from animal_outs
where @hour < 23
order by 1

작성 코드

처음에는 그냥 그룹화해서 카운트하면 되네~~ 하고 했는데 무참히 실패!!
SQL 무식이는 도저히 방법이 안떠올라서 검색을 해봤고 거기서 SET함수를 알게됨.
여차저차 풀어봤는데 서브쿼리 내부에서 hour와 datetime이 일치하지 않는경우에는 아예 쿼리를 안돌려서 값이 텅텅 비어버리는 문제가 발생
이정도는 해결 가능하지~~하고 ifnull()처리 했더니 성공!!

아직 틀리는 문제가 더 많기는 하지만 점점 풀이법과 함수들에 익숙해져나가는 쾌감을 느끼는 중ㅎㅎ