본문 바로가기
SQL

[solvesql - day 20] 미세먼지 수치의 계절간 차이

by 우솨 2025. 1. 11.

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

 

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

 

solvesql.com

-- 3.1 ~ 5.31 = spring
-- 6.1 ~ 8.31 = summer
-- 9.1 ~ 11.30 = autumn
-- 각 측정된 날짜(measured_at)에 대해 계절을 구분하고, 해당 계절의 pm10 미세먼지 수치의 중앙값과 평균을 계산
SELECT 
    -- 날짜(measured_at)의 월-일 부분을 기준으로 계절을 구분
    -- 3월 1일부터 5월 31일까지는 'spring', 6월 1일부터 8월 31일까지는 'summer', 
    -- 9월 1일부터 11월 30일까지는 'autumn', 나머지는 'winter'로 분류
    CASE 
        WHEN strftime('%m-%d', measured_at) BETWEEN '03-01' AND '05-31' THEN 'spring'
        WHEN strftime('%m-%d', measured_at) BETWEEN '06-01' AND '08-31' THEN 'summer'
        WHEN strftime('%m-%d', measured_at) BETWEEN '09-01' AND '11-30' THEN 'autumn'
        ELSE 'winter'  -- 위의 기간에 포함되지 않는 날짜는 'winter'로 분류
    END AS season,

    -- 각 계절별로 pm10 수치의 중앙값을 계산
    MEDIAN(pm10) AS pm10_median, 

    -- 각 계절별로 pm10 수치의 평균을 계산하고 소수점 2자리까지 반올림
    ROUND(AVG(pm10), 2) AS pm10_average

FROM measurements
GROUP BY season  -- 계절별로 데이터를 그룹화하여 결과 출력