
SQL 공부중 입니다. ✍✍✍
문제
https://school.programmers.co.kr/learn/courses/30/lessons/59412
풀이
SELECT DATE_FORMAT(DATETIME,'%k') "HOUR", COUNT(*) "COUNT"
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME,'%k') >= 9 AND DATE_FORMAT(DATETIME,'%k') <= 20
GROUP BY DATE_FORMAT(DATETIME,'%k')
ORDER BY DATE_FORMAT(DATETIME,'%H') ASC;
입양일의 시간을 기준으로 묶어 갯수를 세는 문제였습니다. 날짜,시간이 포함되어있는 DATETIME 형을 DATE_FORMAT()함수의 파라미터를 '%k','%H'로 지정하여 24시간제의 시간형으로 변환해줄 수 있었습니다. 🐶🐶🐶
여기서 DATE_FORMAT(날짜시간,'%H')는 01,02,03...23 시간으로 0이 포함되게 출력되고 DATE_FORMAT(날짜시간,'%k')는 1,2,3..23으로 출력되는 차이점을 알게 되었습니다.
🐧🐧🐧
문제 해결 포인트는 정렬시에 '%k'가 아닌 '%H'으로 정렬하는 것 이었습니다.
DATEFORMAT()로 정렬할 시 문자열로 반환되기 때문에 다음 사진과 같이

10, 11, 12....9 로 정렬됩니다. 그리하며 ORDER BY 시에는 DATEFORMAT(날짜시간,'%H')로 01,02,03...23순으로 정렬하되 출력은 DATEFORMAT(날짜시간,'%k')를 활용하여 해결할 수 있었습니다.
감사합니다.🐪🐪🐪
🍀