소요시간 : 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()처리 했더니 성공!!
아직 틀리는 문제가 더 많기는 하지만 점점 풀이법과 함수들에 익숙해져나가는 쾌감을 느끼는 중ㅎㅎ
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 관계형 데이터 베이스 (0) | 2024.04.24 |
---|---|
[SQL] 용어 정리 (Table, Colum, Row) (0) | 2024.04.08 |
[프로그래머스] 서울에 위치한 식당 목록 출력하기 (0) | 2024.02.22 |
[프로그래머스] 과일로 만든 아이스크림 고르기 (0) | 2024.02.21 |
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (0) | 2024.02.21 |