나도 공부한다/SQL
MySQL - DATE_FORMAT과 날짜/시간함수의 차이
꾸빵이
2024. 10. 22. 23:41
프로그래머스 연도 별 평균 미세먼지 농도 조회하기
문제 조건
수원의 연도별 평균 미세먼지 오염도, 평균 초미세먼지 오염도를 구하면 되는 문제다.
이 때 평균값은 소수 셋째자리에서 반올림하고 연도를 기분으로 오름차순 해야한다.
기존 코드
DATE_FORMAT으로 연도를 뽑아내는 방식을 사용했고 테스트케이스 답은 올바르게 나왔는데 틀렸다고 뜬다.
-- 코드를 작성해주세요
-- 수원의 연도별 평균 미세먼지 오염도(PM10), 평균 초미세먼지 오염도(PM2.5)
-- 소수 셋째자리에서 반올림, 연도 기준 오름차순
SELECT DATE_FORMAT(YM, '%Y') AS YEAR, ROUND(AVG(PM_VAL1),2) 'PM10', ROUND(AVG(PM_VAL2), 2) 'PM2.5'
FROM AIR_POLLUTION
WHERE LOCATION2='수원'
GROUP BY DATE_FORMAT(YM, '%Y')
ORDER BY DATE_FORMAT(YM, '%Y')
틀린 이유
검색해보니 DATE_FORMAT으로 풀면 틀리고 YEAR 함수로 연도를 뽑아내야된다고 한다.
이유는 다음과 같다.
DATE_FORMAT은 반환값이 VARCHAR이다. 따라서 정렬할 때 예상과 다른 결과값이 나올 위험이 있다.
반면에 YEAR은 반환값이 숫자이므로 정렬 과정에 문제가 없다.
따라서 이렇게 수정해줘야 정답이다.
SELECT YEAR(YM) AS YEAR, ROUND(AVG(PM_VAL1),2) 'PM10', ROUND(AVG(PM_VAL2), 2) 'PM2.5'
FROM AIR_POLLUTION
WHERE LOCATION2='수원'
GROUP BY YEAR(YM)
ORDER BY YEAR(YM)