Advented of SQL 2024 : 전국 카페 주소 데이터 정제하기 (DAY 19)

Hyeon·2024년 12월 19일

SQL 문제 풀이

목록 보기
56/61

문제 탐구

이 데이터를 각각 시, 도 정보를 담고 있는 sido 컬럼과 시, 군, 구 정보를 담고 있는 sigungu로 정제하여 각 행정구역 별로 몇 개의 카페가 있는지 집계하는 쿼리를 작성하기

  • 쿼리 결과는 카페가 가장 많은 행정구역 순으로 출력
  • 경기도 성남시 분당구 구미로 11’이라는 데이터는 sido 값이 ‘경기도’, sigungu 값이 ‘성남시’로 정제되어야 함
  • ‘대전광역시 대덕구 계족로 545’라는 데이터는 sido 값이 ‘대전광역시’, sigungu 값이 ‘대덕구’로 정제되어야 함

정답 코드

select sido,sigungu,count(distinct cafe_id) as cnt
from 
(select *,
-- substr(컬럼명 , 시작 위치 , 길이)
-- sido : 1부터 ' '을 기준으로 -1인 길이를 잘라 출력
-- sigungu : ' '을 기준으로 문자열 잘랐을 때 그 다음 위치부터 시작, 띄어쓰기를 기준으로 잘랐을때 시작 위치 기준~ 그 다음 띄어쓰기 사이 값 길이 -1 잘라 출력
SUBSTR(address,1, INSTR(address,' ')-1) as sido,
SUBSTR(address, INSTR(address, ' ') + 1, INSTR(SUBSTR(address, INSTR(address, ' ') + 1), ' ') - 1) AS sigungu,
cafe_id
from cafes) t 
group by sido,sigungu
order by 3 desc;

주의할 점

sqlite는 substring_index가 작동되지 않아 substr과 instr을 통해서 구했다.

mysql은 substring_index로 풀 수 있으니 이걸로 가볍게 풀면된다..!

SUBSTRING_INDEX을 활용한 SPLIT 기능

❗ substring_inex(substring_index(문자열,구분자,구분자 index),구분자, -1)

substring_index(substring_index(address,' ',1),' ',-1) as sido
substring_index(substring_index(address,' ',2),' ',-1) as sigungu

0개의 댓글