SELECT SUBSTR(created_at,1,10) created_at,
ROUND(AVG(point)) average_points
FROM point_users
GROUP BY 1
created_at 컬럼의 data_type인 TIMESTAMP에 대한 지식 부족으로 SUBSTR() 함수로 풀었다. MySQL은 자동 형 변환(TIMESTAMP →문자열)이 자동으로 되기 때문에 문제 푸는데에는 지장은 없다고 생각했다.
ROUND() 함수를 이용하여, 소수점 이하의 값을 반올림 할 수 있다.
3. 정답
SELECT
DATE(p.created_at) AS created_at,
ROUND(AVG(p.point)) AS average_points
FROM
point_users p
GROUP BY
DATE(p.created_at);
DATE()는 TIMESTAMP나 DATETIME 형식의 데이터 값을 YYYY-MM-DD 형식의 DATE로 변환해준다.
4. DATE vs DATETIME vs TIMESTAMP
DATE : 시간을 제외한 날짜를 저장하는 타입으로 기본 포맷은 'YYYY-MM-DD'이며, '1000-01-01'~'9999-12-31'까지 저장할 수 있다.
DATETIME : 날짜와 시간을 함께 저장할 수 있는 타입으로, 기본 포맷은 'YYYY-MM-DD HH:mm:ss'이며, '1000-01-01 00:00:00'~'9999-12-31 23:59:59'까지 저장할 수 있다.
TIMESTAMP : 날짜와 시간을 타임스태플 형식으로 저장하는 타입으로 '1970-01-01 00:00:01' UTC~'2038-01-19 03:14:07' UTC 까지의 범위를 저장할 수 있다. (1970~UTC 부터, 4Byte 정수를 사용하여 값을 저장하기 때문에 2038년 까지만 저장할 수 있다.)