코딩테스트/SQL
[프로그래머스/SQL] 연도 별 미세먼지 농도 조회하기 풀이 (ROUND, DATE_FORMAT, YEAR)
JI NY
2025. 3. 12. 22:53
[프로그래머스 / SQL] 연도 별 미세먼지 농도 조회하기 풀이
(MySQL, String, Data)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/284530
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
2. 문제 해결 아이디어 (풀이)
1. YM을 연도만 뽑아내기 위해, 데이터 포맷을 변경해 준다.
* DATE_FORMAT 혹은 YEAR로, 연도만 나타나게 변경
- 만약 DATE_FORMAT을 이용하는 경우, String이기 때문에 숫자 정렬과 달라질 수 있다. 따라서 CAST()로 숫자로 형변환해줘야 한다.
2. GROUP BY를 이용하여 연도별로 그루핑 한다.
2.1. ROUND 함수로 반올림하고, AVG 함수로 평균을 구한다.
- 이때, ROUND 함수는 ( 반올림할 값, 반올림하고 결과로 얻을 자릿수) 이기 때문에, '3'이 아니라 '2'를 넣어서 둘째 자리로 만들어줘야 한다. (그러면 셋째 자리에서 반올림한 것이기에)
3. 코드
SELECT
YEAR,
ROUND(AVG(PM_VAL1),2) AS PM10,
ROUND(AVG(PM_VAL2),2) AS 'PM2.5'
FROM (SELECT CAST(DATE_FORMAT(YM,"%Y") AS UNSIGNED) AS 'YEAR', LOCATION1, LOCATION2, PM_VAL1, PM_VAL2 FROM AIR_POLLUTION) AS A
# == FROM (SELECT YEAR(YM) AS 'YEAR', LOCATION1, LOCATION2, PM_VAL1, PM_VAL2 FROM AIR_POLLUTION) AS A
WHERE LOCATION2 = '수원'
GROUP BY YEAR
ORDER BY YEAR ASC
4. 마무리
자꾸 왜 안 되나 했더니, Round 함수를 잘못 이해하고 있었다. 그리고 From절 서브쿼리를 쓰지 않아도 그냥 SELECT에서 바로 YEAR 형태를 만들고 GROUP BY가 되는 것 같다. 더 쉽게 풀 수 있도록 노력해야겠다.