
👉 문제 바로가기 : solvesql - Advent of SQL 2024 DAY 19
👉 문제 바로가기 : solvesql - Advent of SQL 2024 DAY 20
저작권 문제로 링크만 첨부하고, 난이도가 낮기 때문에 두 문제를 한번에 첨부한다.
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()이 절실히 생각나게 하는 문제
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이라는 컬럼으로 그룹화할 수 있다.