[solvesql - day 19, 20] lv3 전국 카페 주소 데이터 정제하기, 미세먼지 수치의 계절간 차이

데프·2024년 12월 26일
post-thumbnail

👉 문제 바로가기 : solvesql - Advent of SQL 2024 DAY 19
👉 문제 바로가기 : solvesql - Advent of SQL 2024 DAY 20
저작권 문제로 링크만 첨부하고, 난이도가 낮기 때문에 두 문제를 한번에 첨부한다.

✔️day 19

✍️답안

SELECT
  substring(
    address
    , 1
    , instr(address,' ') - 1
  ) "sido"
  , substring(
    substring(address, instr(address,' ')+1)
    , 1
    , instr(substring(address, instr(address,' ')+1),' ') - 1
  ) "sigungu"
  , count(*) "cnt"
FROM
  cafes
GROUP BY
  sido
  , sigungu
ORDER BY
  3 desc
;

instr를 이용해서 자를 위치를 찾고 substring으로 자른다.

자르는 포인트를 신경쓰지 않으면 공백이 포함되어 오답처리되니 주의하고,
자른 문자열을 다시 이용하는 부분에서 헷갈리거지 않도록 한다.

프로그래밍 함수의 split()이 절실히 생각나게 하는 문제

✔️day 20

✍️답안

SELECT
  CASE
    WHEN strftime('%m%d',measured_at) BETWEEN '0301' AND '0531' THEN 'spring'
    WHEN strftime('%m%d',measured_at) BETWEEN '0601' AND '0831' THEN 'summer'
    WHEN strftime('%m%d',measured_at) BETWEEN '0901' AND '1130' THEN 'autumn'
    ELSE 'winter'
  END "season"
  , round(median(pm10), 2) "pm10_median"
  , round(avg(pm10), 2) "pm10_average"
FROM
  measurements
GROUP BY
  season
;

문제의 지문대로 계절을 나누고, group by를 시행하면 끝.
실행순서가 SELECT 후 GROUP BY가 실행되기 때문에 season이라는 컬럼으로 그룹화할 수 있다.

profile
정보의 홍수를 기록하는 데프의 로그

0개의 댓글