DA Study/TIL

[TIL] shrftime()으로 날짜 요일로 변환하기 #SQL #SQLite #solvesql

harrym8n 2024. 12. 24. 19:07

solvesql - 서울숲 요일별 대기오염도 계산하기
👉 문제 바로가기(solvesql)

SELECT 
  CASE WHEN strftime('%u', measured_at) = '1' THEN '월요일'
       WHEN strftime('%u', measured_at) = '2' THEN '화요일'
       WHEN strftime('%u', measured_at) = '3' THEN '수요일'
       WHEN strftime('%u', measured_at) = '4' THEN '목요일'
       WHEN strftime('%u', measured_at) = '5' THEN '금요일'
       WHEN strftime('%u', measured_at) = '6' THEN '토요일'
       WHEN strftime('%u', measured_at) = '7' THEN '일요일'
                                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 strftime('%u', measured_at)
ORDER BY strftime('%u', measured_at)

[ 논리 과정 ]

  1. Datetime 타입 데이터를 요일로 변환한다.
  2. 변환한 요일 데이터로 그룹핑하여 데이터를 추출한다.
  3. 월요일부터 나오도록 데이터를 정렬한다.

[ 문제 상황 ]

  • 월요일이 먼저나오도록 정렬해야 하는데 strftime에 '%w' 코드는 일요일 값이 0으로, 정렬시 먼저 나온다.

[ 해결 ]

  • strftime에 '%u' 코드를 사용하면 월요일:1 ~ 일요일:7로 매핑되어 오름차순 정렬로 월요일부터 나오도록 정렬이 가능하다.

[ 회고 ]

  • 날짜 데이터를 다룰 때 strftime는 유용하게 쓰인다. 이번 문제 말고도 여러 문제를 strftime 함수를 통해 해결할 수 있었다.
  • strftime 함수의 옵션을 잘 알아두어야겠다.