본문 바로가기

SQL

[SQL] 문자 가공, 조건 지정

업무 필요한 문자 포맷이 다를 때, SQL로 가공하기 (REPLACE, SUBSTRING, CONCAT)

replace(바꿀 컬럼, 현재 값, 바꿀 값): 특정 문자를 다른 문자로 바꿀 때 사용한다.

substr(조회 할 컬럼, 시작 위치, 글자 수): 특정 문자만 필요할 때 필요한 부분만 조회할 수 있다.

concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, ...): 원하는 문자가 여러개일때, 하나로 합칠 수 있다.

-- ex) addr의 ‘문곡리’를 ‘문가리’로 바꾸기
select addr "원래 주소",
       replace(addr, '문곡리', '문가리') "바뀐 주소"
from food_orders
where addr like '%문곡리%'

-- ex) '서울특별시'를 포함하는 addr에서 1번째 문자부터 2글자 검색
select addr "원래 주소",
       substr(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'

-- ex) '서울'을 포함하는 addr에서 '[2글자] 레스토랑 이름'으로 검색
select restaurant_name "원래 이름",   
       addr "원래 주소",
       concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
from food_orders
where addr like '%서울%'

-- ex) group by로 음식 타입별 평균 평균 금액 구하기
select substring(addr, 1, 2) "시도",
       cuisine_type "음식 종류",
       avg(price) "평균 금액"
from food_orders
where addr like '%서울%'
group by 1, 2 -- 1,2는 각각 select의 1번 col, 2번 col을 의미한다.

 

조건에 따라 포맷을 변경 (IF, CASE)

if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)

  • 조건에 따라 다른 방법을 적용하고 싶을 때 사용한다.
  • 조건을 지정해주는 문법중 가장 기초적인 것이다.

case when 조건1 then 값(수식)1 when 조건2 then 값(수식)2 else 값(수식)3 end

  • 각 조건별로 적용할 값을 지정해 줄 수 있다.
  • 조건이 두 개 이상 지정해야 할 경우에 사용한다.
-- ex) ‘문곡리’가 평택에만 해당될 때, 평택을 포함하는 ‘문곡리’만 ‘문가리’로 수정
select addr "원래 주소",
       if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%'

-- ex) 10세 이상, 30세 미만의 고객의 나이와 성별로 그룹 나누기
select name,
       age,
       gender,
       case when (age between 10 and 19) and gender='male' then "10대 남자"
            when (age between 10 and 19) and gender='female' then "10대 여자"
            when (age between 20 and 29) and gender='male' then "20대 남자"
            when (age between 20 and 29) and gender='female' then "20대 여자" end "그룹" 
from customers
where age between 10 and 29

/* ex) if,case 혼합
서울일 때는 수수료 계산 * 1.1, 기타일 때는 그냥 1
25분 초과하면 음식 가격의 5%, 30분 초과하면 음식 가격의 10% */
select restaurant_name,
       order_id,
       delivery_time,
       price,
       addr,
       case when delivery_time>25 and delivery_time<=30 then price*0.05*(if(addr like '%서울%', 1.1, 1))
            when delivery_time>30 then price*1.1*(if(addr like '%서울%', 1.1, 1))
            else 0 end "수수료"
from food_orders

오늘은 SQL을 공부하면서 본 적 없던 함수들이 조금 나왔다.

3주차 강의에 나온 것을 보면 자주 쓰이는 함수들인 것 같은데 왜 본적이 없는지 모르겠다.

강의도 얼마 남지 않았고 기술면접 공부를 위해 SQL과 DB에 작동원리 같은 것도 공부하면 좋을 것 같다.

'SQL' 카테고리의 다른 글

[SQL] SQL 숫자 계산, GROUP BY, ORDER BY  (0) 2024.08.03
[SQL] SQL 시작하기  (0) 2024.08.02