나도 공부한다/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)