문제
https://school.programmers.co.kr/learn/courses/30/lessons/59412
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
첫 제출 코드
SELECT DATE_FORMAT(DATETIME, "%H") AS HOUR, COUNT(ANIMAL_ID) AS COUNT FROM ANIMAL_OUTS
GROUP BY DATE_FORMAT(DATETIME, "%H") HAVING DATE_FORMAT(DATETIME, "%H") BETWEEN 9 AND 19
ORDER BY DATE_FORMAT(DATETIME, "%H")
에러 문구
Unknown column 'DATETIME' in 'having clause'
해결방법
HAVING절에 조건을 거는 column은 순수한 column명을 그대로 써줘야한다고 한다. (함수 사용 가능하지만 AS ~ 이런식의 별칭은 안됨)
즉 select문의 컬럼의 별칭으로 바꿔주면 된다.
생각해보면 이미 별칭을 만들어주었는데도 사용하지 않고 그대로 date_format 함수를 사용하여 넣은 게 웃기긴 하다!
하지만 그 덕분에 having절에서 조심해야하는 부분을 알 수 있었다.
SELECT DATE_FORMAT(DATETIME, "%H") AS HOUR, COUNT(ANIMAL_ID) AS COUNT FROM ANIMAL_OUTS
GROUP BY HOUR HAVING HOUR BETWEEN 9 AND 19
ORDER BY HOUR
+ 날짜 관련 함수
나는 date_format() 을 사용하여 시간만 추출하였는데, 더 간단한 함수가 있었다.
hour(datetime) 도 동일한 출력이 나온다.
그 외의 몇 개의 관련 함수들
dayofweek(date) | 날짜를 한 주의 몇 번째 요일인지 숫자로 리턴 (1=일, 2=월, ... , 7=토) |
dayofmonth(date) | 그 달의 몇 번째 날인지를 알려준다. 리턴 값은 1에서 31 사이이다. |
dayofyear(date) | 한 해의 몇 번째 날인지를 알려준다. 리턴 값은 1에서 366 사이이다. |
month(date) | 해당 날짜가 몇 월인지 알려준다. 리턴 값은 1에서 12 사이이다. |
dayname(date) | 해당 날짜의 영어식 요일이름을 리턴한다. |
monthname(date) | 해당 날짜의 영어식 월 이름을 리턴한다. |
quarter(date) | 분기를 리턴한다 (1~ 4) |
year(date) | 년도를 리턴한다.(1000 ~ 9999) |
hour(time) | 시간을 알려준다.(0 ~ 23) |
minute(time) | 분을 알려준다(0 ~ 59) |
second(time) | 초를 알려준다(0 ~ 59) |
'Database > MySQL' 카테고리의 다른 글
[Programmers/MySQL]대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (2) | 2023.02.16 |
---|---|
[MySQL] NULL 처리 (0) | 2023.02.14 |
[Programmers/MySQL] TRUNCATE() 와 ROUND() (0) | 2023.02.10 |
[Programmers/MySQL] 데이터가 없는 날짜/시간은 0으로 처리하기 (0) | 2023.02.10 |
[Programmers/MySQL] UNION ALL에 대해 (0) | 2023.02.09 |