문제
해당 문제는 프로그래머스 SQL 고득점 Kit 에 있는 GORUP BY 문제이다.
출력 결과
사실 처음에 (SQL 을 다 잊어버린 상태로) 문제를 풀었을 때 아래와 같이 HOUR(DATETIME) 기준으로 GROUP BY 를 하고, HAVING 절에도 조건을 추가하였는데,
SELECT HOUR(DATETIME), COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING 9 <= HOUR(DATETIME) <= 19
ORDER BY HOUR(DATETIME) ASC
아래와 같은 오류가 발생했다.
SQL 실행 중 오류가 발생하였습니다.
Unknown column 'DATETIME' in 'having clause'
오류의 원인은
HAVING 절에서는 순수한 COULUMN 을 사용해야 한다.
즉, HOUT(DATETIME) 에서 HOUR()과 같은 추가적인 COMMAND를 사용하지 않은 순순한 컬럼명을 그대로 써야 한다.
애초에 JOIN을 해서 테이블 컬럼 간 구분이 필요한 경우가 아니라면 AS 를 잘 사용하지 않아서 익숙하지 않았던 것 같다,,
그래서 아래와 같이 AS(alias) 를 사용해서 컬럼명 지정해주면, 문제가 해결된다!
SELECT HOUR(DATETIME) as h, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING 9 <= h AND h <= 19
ORDER BY HOUR(DATETIME) ASC
물론 GROUP BY나 ORDER BY 에서 설정하는 컬럼명을 h 로 사용해도 된다.
SELECT HOUR(DATETIME) as h, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
GROUP BY h
HAVING 9 <= h AND h <= 19
ORDER BY h ASC
'etc.' 카테고리의 다른 글
[Data Structure] Graph 와 Tree 의 차이점 (0) | 2022.04.04 |
---|---|
[Network] VoIP OpenSource 종류 별 기능 (0) | 2022.02.22 |
[Network] VoIP 서비스 및 IETF SIP 기술 동향, VoIP Open Source (0) | 2022.02.17 |