[PostgreSQL] solvesql LV.3 미세먼지 수치의 계절간 차이 (with 중앙값 구하는 방법)

2025. 10. 22. 15:13·프로그래밍 언어/02. SQL

https://solvesql.com/problems/finedust-seasonal-summary/

 

https://solvesql.com/problems/finedust-seasonal-summary/

 

solvesql.com

🔍 문제

대기 오염 측정 데이터(measurements 테이블)를 활용하여

계절별 미세먼지(PM10) 농도 변화를 분석하고자 합니다.

 

measured_at 컬럼에는 측정 일자가, pm10 컬럼에는 미세먼지 농도가 저장되어 있습니다.

각 측정값을 계절 기준으로 구분한 뒤,

각 계절의 중앙값(median)과 평균(average)을 구하는 것이 목표입니다.


🎯정답

select
  CASE
    WHEN to_char(measured_at, 'MM-DD') between '03-01' and '05-31' THEN 'spring'
    WHEN to_char(measured_at, 'MM-DD') between '06-01' and '08-31' THEN 'summer'
    WHEN to_char(measured_at, 'MM-DD') between '09-01' and '11-30' THEN 'autumn'
    else 'winter'
  END as season,
percentile_disc(0.5) within group (order by pm10) as pm10_median,
round(avg(pm10), 2) as pm10_average
from measurements
group by 1;

❓풀이

  • case ~ when 구문을 사용해서 select절에 봄/여름/가을/겨울을 표현해줬다.
  • ✳️ 핵심 : 중앙값을 구하는 방법
    • postgresql 에서 중앙값 구하기 : percentile_disc를 이용하여 중앙값을 구할 수 있다.
SELECT
  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 값컬럼) AS median
FROM 테이블명;
  • 데이터 개수가 홀수이면 `percentile_disc`을 이용해서 정확한 중앙값을 찾을 수 있다.
  • 만약 데이터 수가 짝수이면 `percentile_cont`을 이용해야 한다.
    • `percentile_cont`는 데이터 수가 짝수일 때 중앙에 있는 값을 데이터 내에서 가져올 수 없으므로 "선형보간"을 이용해서 중앙값을 구한다.

'프로그래밍 언어 > 02. SQL' 카테고리의 다른 글

[solvesql] LV.4 레스토랑 요일 별 구매금액 Top 3 영수증  (0) 2025.11.15
[PostgreSQL] solvesql LV.3 전국 카페 주소 데이터 정제하기 (with. 문자열 처리하기)  (0) 2025.10.21
[PostgreSQL] solvesql LV.3 멀티 플랫폼 게임 찾기  (0) 2025.10.21
[PostgreSQL] solvesql LV.3 폐쇄할 따릉이 정류소 찾기 2  (0) 2025.10.15
[PostgreSQL] solvesql LV.3 서울숲 요일별 대기오염도 계산하기 (with.날짜에서 요일 출력하기)  (0) 2025.10.15
'프로그래밍 언어/02. SQL' 카테고리의 다른 글
  • [solvesql] LV.4 레스토랑 요일 별 구매금액 Top 3 영수증
  • [PostgreSQL] solvesql LV.3 전국 카페 주소 데이터 정제하기 (with. 문자열 처리하기)
  • [PostgreSQL] solvesql LV.3 멀티 플랫폼 게임 찾기
  • [PostgreSQL] solvesql LV.3 폐쇄할 따릉이 정류소 찾기 2
dalleeoppaa
dalleeoppaa
DA, GIS 공부 기록
  • dalleeoppaa
    달래오빠
    dalleeoppaa
  • 전체
    오늘
    어제
    • 분류 전체보기 (112) N
      • GIS (22)
        • 01. GIS TIL (13)
        • 02. OpenSource Geo Data (6)
        • 03.사이드 프로젝트 (1)
      • 프로젝트 (6)
        • 01. 상권분석 지도 (3)
        • 02. olist 고객 RFM 분석 (3)
      • PointCloud (1)
      • 프로그래밍 언어 (57) N
        • 01. Python (1)
        • 02. SQL (49)
        • 03. C++ (3) N
        • 04. TIL (4)
      • 데이터분석 (23)
        • 01. Google Cloud Platform (1)
        • 02. GA4 & GTM (1)
        • 03. LookerStudio (4)
        • 04. Apach Spark (7)
        • 05. 데이터 시각화 (10)
      • 인턴 (2)
        • 01. NPL (2)
        • 02. TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터분석가코테
    SQL
    sql코테
    프로그래머스코테
    프로그래머스lv3
    solvesql
    데이터분석가
    태블로연습
    데이터분석취준
    GIS
    코딩테스트
    프로그래머스SQL
    태블로부트캠프
    postgresql연습
    MySQL
    프로그래머스
    데이터분석
    태블로신병훈련소
    c++독학
    PostgreSQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
dalleeoppaa
[PostgreSQL] solvesql LV.3 미세먼지 수치의 계절간 차이 (with 중앙값 구하는 방법)
상단으로

티스토리툴바