본문 바로가기
SQL

[solvesql - day 11] 서울숲 요일별 대기오염도 계산하기

by 우솨 2025. 1. 11.

https://solvesql.com/problems/weekday-stats-airpollution/

 

https://solvesql.com/problems/weekday-stats-airpollution/

 

solvesql.com

-- 각 행의 측정 시간(measured_at)에서 요일을 계산하고, 이를 한글 요일명으로 변환
SELECT 
    CASE strftime('%w', measured_at) -- '%w'는 SQLite에서 0~6으로 요일을 반환 (0: 일요일, 1: 월요일, ... , 6: 토요일)
        WHEN '0' THEN '일요일'       
        WHEN '1' THEN '월요일'       
        WHEN '2' THEN '화요일'       
        WHEN '3' THEN '수요일'       
        WHEN '4' THEN '목요일'       
        WHEN '5' THEN '금요일'       
        WHEN '6' THEN '토요일'       
    END AS weekday,                  -- 변환된 요일 이름을 'weekday' 열로 지정

    -- 각 요일별 평균값을 계산, 소수점 넷째 자리까지 반올림
    ROUND(AVG(no2), 4) AS no2,       -- 이산화질소(NO2)의 평균값
    ROUND(AVG(o3), 4) AS o3,         -- 오존(O3)의 평균값
    ROUND(AVG(co), 4) AS co,         -- 일산화탄소(CO)의 평균값
    ROUND(AVG(so2), 4) AS so2,       -- 이산화황(SO2)의 평균값
    ROUND(AVG(pm10), 4) AS pm10,     -- 미세먼지(PM10)의 평균값
    ROUND(AVG(pm2_5), 4) AS pm2_5    -- 초미세먼지(PM2.5)의 평균값

FROM measurements                     

GROUP BY weekday                      -- 요일별로 데이터를 그룹화하여 평균값 계산

-- 요일을 월요일부터 일요일 순으로 정렬
ORDER BY 
    CASE weekday 
        WHEN '월요일' THEN '1'       -- 월요일: 1
        WHEN '화요일' THEN '2'       -- 화요일: 2
        WHEN '수요일' THEN '3'       -- 수요일: 3
        WHEN '목요일' THEN '4'       -- 목요일: 4
        WHEN '금요일' THEN '5'       -- 금요일: 5
        WHEN '토요일' THEN '6'       -- 토요일: 6
        WHEN '일요일' THEN '7'       -- 일요일: 7
    END