문제
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
sql
SELECT MID(DATETIME,12,2) HOUR, COUNT(*) COUNT
FROM ANIMAL_OUTS
GROUP BY MID(DATETIME,12,2)
ORDER BY MID(DATETIME,12,2)
문제가 원하는건 한자리 수라면 한자리로 표시하라고 해서 그런지 아니라고 나왔다
그래서 IF문으로 처리해봤는데
-- 코드를 입력하세요
SELECT IF(DATE_FORMAT(DATETIME,'%H')<10, RIGHT(DATE_FORMAT(DATETIME,'%H'),1),DATE_FORMAT(DATETIME,'%H')) HOUR, COUNT(*) COUNT
FROM ANIMAL_OUTS
GROUP BY DATE_FORMAT(DATETIME, '%H')
ORDER BY DATE_FORMAT(DATETIME,'%H')
이것도 아니라고 나왔다. 하~~ 살짝 도움을 받아서,,해결한 결과
SELECT IF(DATE_FORMAT(DATETIME,'%H')<10, RIGHT(DATE_FORMAT(DATETIME,'%H'),1),DATE_FORMAT(DATETIME,'%H')) HOUR, COUNT(*) COUNT
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME, '%H') BETWEEN 09 AND 19
GROUP BY DATE_FORMAT(DATETIME, '%H')
ORDER BY DATE_FORMAT(DATETIME,'%H')
문제에서 09:00부터 19:59까지 라고 쓰여있었는데, 그냥 출력해서 생긴 문제였다.문제를 잘 읽자는 다짐을 또 한다...
그러다가 혹시 한자리수 표기는 안해도 되나 싶어서 다시 해보니
SELECT DATE_FORMAT(DATETIME, '%H'), COUNT(*) COUNT
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME, '%H') BETWEEN 09 AND 19
GROUP BY DATE_FORMAT(DATETIME, '%H')
ORDER BY DATE_FORMAT(DATETIME,'%H')
이것도 정답이라고 나온다. 어디에 장단을 맞추라는 거임?~~~
그러면 RIGHT문도 가능할까 싶어서 해봤다.
SELECT MID(DATETIME,12,2) HOUR, COUNT(*) COUNT
FROM ANIMAL_OUTS
WHERE MID(DATETIME,12,2) BETWEEN 09 AND 19
GROUP BY MID(DATETIME,12,2)
ORDER BY MID(DATETIME,12,2)
이것도 정답으로 처리된다. 예시를 보지 말고 문제를 보고 풀어야겠다는 생각이 들었고, 열심히 땅굴 파느라 답답했는데 오히려 여러가지 방법 사용해봐서 좋았다 싶기도^^;....
다른분 코드도 참고해보니
SELECT HOUR(datetime) AS hour, COUNT(animal_id) AS count
FROM animal_outs
WHERE HOUR(datetime) BETWEEN 9 AND 20
GROUP BY HOUR(datetime)
order by hour
DATETIME을 HOUR로 묶으면 되는 간단한 문제였다...흑흑....
찾아보니 다음과 같은 함수들이 있다. 문제에 맞게 사용하면 좋을듯.
YEAR : 연도 추출
MONTH : 월 추출
DAY : 일 추출 (DAYOFMONTH와 같은 함수)
HOUR : 시 추출
MINUTE : 분 추출
SECOND : 초 추출