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

오유찬·2026년 1월 27일

SQL

목록 보기
59/71

요일을 구하는 함수

  • weekday(date) : 월요일(0)부터 일요일(6)
  • dayofweek(date) : 일요일(1)부터 토요일(7)
SELECT  WEEKDAY(measured_at) 
FROM    measurements
GROUP BY
        WEEKDAY(measured_at)

SELECT  (CASE WHEN WEEKDAY(measured_at) = 0 THEN '월요일'
        WHEN WEEKDAY(measured_at) = 1 THEN '화요일'
        WHEN WEEKDAY(measured_at) = 2 THEN '수요일'
        WHEN WEEKDAY(measured_at) = 3 THEN '목요일'
        WHEN WEEKDAY(measured_at) = 4 THEN '금요일'
        WHEN WEEKDAY(measured_at) = 5 THEN '토요일'
        ELSE '일요일' END) as weekday,
        ROUND(AVG(no2),4) as no2,
        ROUND(AVG(o3), 4) as o3,
        ROUND(AVG(co), 4) as co,
        ROUND(AVG(so2), 4) as so2,
        ROUND(AVG(pm10), 4) as pm10,
        ROUND(AVG(pm2_5), 4) as pm2_5
FROM    measurements
GROUP BY
        weekday

이걸 월화수목금토일 순으로 정렬하려면 어떻게 해야 될까?

-- 01. FIELD
ORDER BY
        FIELD(weekday, '월요일', '화요일', '수요일', '목요일', '금요일', '토요일', '일요일');

-- 02. MAX
ORDER BY
        MAX(WEEKDAY(measured_at)) ASC
  1. FIELD(찾을값, 나열된 목록(값1, 값2, 값3,) MySQL에서만 가능
    나열된 목록의 순서가 찾을값의 값이 된다.
    FIELD('수요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일', '일요일') → 3
  1. MAX(WEEKDAY(measured_at)) ASC
    measured_at에 weekday 함수를 적용시킨 값을 오름차순으로 정렬하면 '월→일' 순으로 정렬된다. 그런데 문제는 GROUP BY weekday로 이미 그룹화를 해놓은 것이다. 그래서 레코드마다 개인 값으로 정렬을 시키려고 하면, 집계되지 않은 값이라고 에러가 든다. 따라서, MAX로 대표값을 나타나도록 하고 오름차순으로 정렬하면 원하는 대로 정렬이 가능해진다.
profile
열심히 하면 재밌다

0개의 댓글