코딩테스트/SQL

[프로그래머스/SQL] 연도 별 미세먼지 농도 조회하기 풀이 (ROUND, DATE_FORMAT, YEAR)

JI NY 2025. 3. 12. 22:53

[프로그래머스 / SQL]  연도 별 미세먼지 농도 조회하기 풀이 

(MySQL, String, Data)

[프로그래머스 / SQL]  연도 별 미세먼지 농도 조회하기 풀이

 

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가 되는 것 같다. 더 쉽게 풀 수 있도록 노력해야겠다.