코딩테스트/SQL 문제

[프로그래머스] 284530 연도 별 평균 미세먼지 농도 조회하기 - SQL

glorypang 2025. 4. 23. 16:49
728x90
반응형
SMALL

📌 문제 정보

  • 출처: 문제 링크
  • 난이도: ⭐
  • 문제 유형: String, Date
  • 사용 언어: SQL

🔍 문제 설명

`AIR_POLLUTION` 테이블은 전국의 월별 미세먼지 정보를 담은 테이블입니다. AIR_POLLUTION 테이블의 구조는 다음과 같으며 LOCATION1, LOCATION2, YM, PM_VAL1, PM_VAL2은 각각 지역구분1, 지역구분2, 측정일, 미세먼지 오염도, 초미세먼지 오염도를 의미합니다.

 

`AIR_POLLUTION` 테이블에서 수원 지역의 연도 별 평균 미세먼지 오염도와 평균 초미세먼지 오염도를 조회하는 SQL문을 작성해주세요. 이때, 평균 미세먼지 오염도와 평균 초미세먼지 오염도의 컬럼명은 각각 PM10, PM2.5로 해 주시고, 값은 소수 셋째 자리에서 반올림해주세요.
결과는 연도를 기준으로 오름차순 정렬해주세요.


💡 풀이 노트

  • `YEAR(YM)`
    → 날짜에서 연도만 추출
  • `ROUND(AVG(...), 2)`
    → 평균값을 소수점 둘째 자리까지 반올림
  • `GROUP BY YEAR(YM)`
    → 연도 단위로 그룹화
  • `WHERE LOCATION2 = '수원'`
    → 수원 지역 데이터만 분석 대상으로 필터링

🚀 코드 (SQL)

SELECT 
    YEAR(YM) AS YEAR,
    ROUND(AVG(PM_VAL1), 2) AS `PM10`,
    ROUND(AVG(PM_VAL2), 2) AS `PM2.5`
FROM AIR_POLLUTION
WHERE LOCATION2 = '수원'
GROUP BY YEAR(YM)
ORDER BY YEAR(YM);

🖥 실행 결과

입력 & 출력
YEAR	PM10	PM2.5
2018	41	20.25

🔄 보충 개념

1. Round() 함수 - 소수점  처리

ROUND(AVG(PM_VAL1), 2)

 

  • `ROUND(value, 2)` 는 소수 둘째 자리까지 표현하고, 셋째 자리에서 반올림
  • 예시:
    • 20.256 → 20.26
    • 20.254 → 20.25
  • 여기서 `2`는 소수점 아래 몇 자리까지 표시할지를 의미

2. YEAR() vs DATE_FORMAT() — 연도 추출 함수 비교

`YEAR(YM)`

  • 정수형 연도를 추출하는 함수 (2021, 2022, ...)
  • 성능이 더 빠르고, 숫자 정렬 및 비교에 유리
  • 채점 시스템에서 기대하는 연도 형식에 맞는 값 제공

`DATE_FORMAT(YM, '%Y')`

  • 날짜를 문자열로 변환 ('2021', '2022')
  • 주로 "2021년", "2021-03" 같은 형식화된 날짜 출력에 사용

❗ 이 문제에서는 `DATE_FORMAT()`을 쓰면 정답이 틀릴 수 있습니다.
이유: 반환값이 문자열이기 때문에 채점 시스템에서 데이터 타입 mismatch 또는 잘못된 정렬/비교가 발생할 수 있습니다.


📌 깃허브 코드 저장소: https://github.com/glorypang/CodingTest

 

 

 

728x90
반응형
LIST