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

풀이
처음에는 시간별로
group by
를 사용하여 count
를 사용하는 간단한 문제 인줄 알았다.
하지만 계속 문제가 오답이라고 하여서 찾아보았다.SELECT hour(DATETIME) HOUR, count(*) COUNT
from ANIMAL_OUTS
group by hour(DATETIME)
order by hour(DATETIME)
해당 문제는 데이터가 없는 시간대도 0이 나오게 해야하는 문제였다. 처음에는 챗GPT에게 물어봤다. 하지만 먼가 이상한 느낌이 들어서 다른 사람들의 풀이를 찾아보았다. 거기서 SQL에서 변수를 사용하는 것을 찾았고, hour이라는 변수를 줘서 +1씩 하여 23까지만 출력을 하였고, subQuery를 이용하여 count까지 뽑은 것이였다.
set@hour = -1;
select (@hour := @hour + 1) hour,
(SELECT count(hour(DATETIME))
from ANIMAL_OUTS
where Hour(datetime)=@hour) count
from ANIMAL_OUTS
where @hour < 23;


Share article