(Advent of SQL 2024) LV3 서울숲 요일별 대기오염도 계산하기

chaechae·2024년 12월 11일
0

코딩테스트(SQL) 

목록 보기
24/25
post-thumbnail

지금 solvesql에서 12월동안 하루에 한 문제씩 따끈한 문제를 풀어볼 수 있는 소소한 챌린지를 하고 있는데요! 좀 고민이 필요했던 문제들을 정리해보려고 합니다.

서울숲 요일별 대기오염도 계산하기

문제요약

  • mesurments 테이블에서 요일별 대기 오염도 평균을 계산하는 쿼리를 작성해주세요.
  • 대기 오염도 값음 소수점 4째 짜리까지
  • 결과 쿼리는 월요일-> 일요일 순으로 출력되어야 합니다.

쿼리

SELECT CASE WHEN weekday = 0 THEN '일요일' 
            WHEN weekday = 1 THEN '월요일' 
            WHEN weekday = 2 THEN '화요일' 
            WHEN weekday = 3 THEN '수요일' 
            WHEN weekday = 4 THEN '목요일' 
            WHEN weekday = 5 THEN '금요일' 
            WHEN weekday = 6 THEN '토요일' ELSE '' END as weekday # 날짜 형태를 문자로 
      , no2, o3, co, so2, pm10, pm2_5

FROM (SELECT DATE_FORMAT(measured_at,'%w') as weekday
      , ROUND(AVG(no2),4) no2
      , ROUND(AVG(o3),4) o3
      , ROUND(AVG(co),4) co
      , ROUND(AVG(so2),4) so2
      , ROUND(AVG(pm10),4) pm10
      , ROUND(AVG(pm2_5),4)  pm2_5  
FROM measurements
GROUP BY DATE_FORMAT(measured_at,'%w')) A # 날짜 형태를 바꾸고, 집계된 TABLE
ORDER BY 
    CASE WHEN weekday = 0 THEN 7 ELSE weekday 
    END # 일요일을 맨 마지막으로

풀이

위 문제의 핵심 key는 요일별로 집계한뒤, 월요일 부터 일요일 순으로 나열하기 위한 방법을 찾는 것 입니다. 저는 order by에 조건문을 이용하여 해결했습니다!

우선 %Y-%M-%d 형태의 DATE_FORMAT 을 '%w'요일별로 바꾸게 되면 일요일(0) ~ 토요일(7) 의 값으로 바뀌게 되는데요. 이대로 Order by 하게 되면 일요일(0)부터 출력되는 문제가 생깁니다. 문제를 풀면서 저도 알게 되었지만 Order by에도 조건문이 가능하다는 사실! weekday= 0 (일요일) 에 해당하는 부분을 7로 바꿔서 일요일이 맨 마지막에 오도록 해주었습니다. (물론, 처음부터 0을 7로 바꿔서 하는 방법도 있을 것 입니다!)

profile
다양한 컨텐츠가 있는 곳을 좋아합니다. 시리즈를 참고하시면 편하게 글을 보실 수 있습니다🫠

0개의 댓글