1. 문제
2. 풀이
- FROM → point_user 테이블
- WHERE → X (필터링 조건이 없으므로)
- GROUP BY → SUBSTR(created_at,1,10) created_at
- HAVING → X (그룹이 없으므로)
- SELECT → SUBSTR(created_at,1,10) created_at, ROUND(AVG(point)) average_points
- ORDER BY → X (정렬 조건이 없으므로)
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년 까지만 저장할 수 있다.)
'MySql' 카테고리의 다른 글
[내일 배움 캠프, SQL 달리기 반] Lv3. 이용자의 포인트 조회하기 (0) | 2025.03.24 |
---|---|
[내일 배움 캠프 4-5] JOIN이란? (0) | 2025.03.24 |
[내일 배움 캠프, SQL 달리기 반] Lv1. 데이터 속 김서방 찾기 (0) | 2025.03.24 |
[내일 배움 카드 4-2] Subquery란? (0) | 2025.03.24 |
[내일 배움 캠프 3-7] Data Type 오류 + 3주차 숙제 (0) | 2025.03.24 |