문제에서의
DATETIME
과같이 날짜 혹은 시간을 나타낸 데이터에서는 다음과같은 함수를 사용할 수 있다.
- YEAR()
YEAR(2023-03-16)
2023
- MONTH()
- DAY()
- HOUR()
HOUR(17:31:30)
17
- MINUTE()
- SECOND()
SELECT HOUR(DATETIME) AS "HOUR" FROM ANIMAL_OUTS WHERE 9 <= HOUR
위 쿼리는 WHERE절에서 오류를 발생시킨다.
HOUR로 별칭을 정해주었음에도 어째서 오류가 발생하는가?
- WHERE절은 SELECT보다 먼저 수행되기 때문에, 별칭이 확정되지 않은 시점이므로 오류를 야기한다.
/* HAVING 사용한 풀이 */
SELECT
-- 시간 정보에서 시간을 추출하여 선택하고, 별칭은 "HOUR"로 하라.
HOUR(DATETIME) AS "HOUR",
-- 분류 기준에 따라 갯수를 세어 선택하라. 별칭은 "COUNT"로 하라.
COUNT(*) AS "COUNT"
-- 아래 table에서
FROM ANIMAL_OUTS
-- HOUR을 기준으로 분류하라
GROUP BY HOUR
-- HOUR은 9시에서 19시까지에 속해야한다.
HAVING 9 <= HOUR AND HOUR <= 19
-- HOUR을 기준으로 오름차순 정렬하라.
ORDER BY HOUR ASC
/* WHERE 사용한 풀이 */
SELECT
HOUR(DATETIME) AS "HOUR",
COUNT(*) AS "COUNT"
FROM ANIMAL_OUTS
WHERE 9 <= HOUR(DATETIME) AND HOUR(DATETIME) <= 19
GROUP BY HOUR
ORDER BY HOUR ASC