출처: 프로그래머스 코딩 테스트 연습
https://programmers.co.kr/learn/courses/30/lessons/59412
SELECT HOUR(DATETIME), COUNT(*) AS count
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING 9 <= HOUR(DATETIME) AND HOUR(DATETIME) <= 19
ORDER BY HOUR(DATETIME) ASC;
Unknown column 'DATETIME' in 'having clause'
SELECT hour, COUNT(*) AS count
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME) AS hour
HAVING 9 <= hour AND hour <= 19
ORDER BY hour ASC;
You have an error in your SQL syntax
첫 번째 풀이
SQL에서는 기본적으로 GROUP BY 절에 있거나 집계 함수가 사용된 컬럼만을 HAVING 절에서 사용할 수 있고, MySQL에서는 SELECT 문에 사용된 컬럼을 사용하는 것도 허용된다. 그런데 HOUR(DATETIME)는 컬럼 이름 앞에 함수가 붙었고, 그 함수가 집계 함수가 아니라 산술 함수이므로, HAVING절에서는 사용할 수 없는 것이다.
두 번째 풀이
GROUP BY 절에서는 SELECT 절과 달리, alias를 사용할 수 없다.
SELECT HOUR(DATETIME) AS hour, COUNT(*) AS count
FROM ANIMAL_OUTS
GROUP BY hour
HAVING hour BETWEEN 9 AND 19
ORDER BY hour ASC;
블로그에 출처를 남기고 문제 분석을 올려도 괜찮을까요 ? 늦은 시간이라 제 블로그에 먼저 올리고 싶습니다. 제 블로그 주소를 남길테니 혹시 거절하신다거나 하시면 바로 삭제조치 하겠습니다. 먼저 올려서 기분나쁘실 수 있으니 죄송합니다. https://blog.naver.com/have_13/222475380828 입니다. 다시한번 죄송합니다.