[SQL] 3. 데이터 가공하기(SUBSTR, REPLACE, CONCAT,IF, CASE)

김죠·2023년 12월 22일
0
post-thumbnail

지금까지는 where문을 이용해 데이터를 필터링하는 방법을 배워보았다. 하지만 실제 현업에서 추출된 데이터 중에서도 일부만 필요할 때가 있는데, 오늘은 이와 같이 데이터의 일정 부분만 가공하여 추출하는 함수들에 대해서 배웠다.

1. REPLACE

어떤 특정 문자(현재 값)를 다른 문자(바꿀 값)로 바꾸고 싶을 때 사용하는 함수이다.

기본 형태

replace(바꿀 컬럼, 현재 값, 바꿀 값)

예제

1) 'Blue Ribbon' 식당이름을 'Pink Ribbon'로 바꿔라

select restaurant_name "원래 상점명",
       replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
from food_orders
where restaurant_name like '%Blue Ribbon%'

2) 주소가 문곡리에서 문가리로 바뀌었을 때 이를 반영하라

select addr, replace(addr, "문곡리", "문가리") '바뀐주소'
from food_orders
where addr like "%문곡리%"

2. SUBSTR

어떤 데이터의 특정 문자만 골라서 조회하고 싶을 때 사용하는 함수이다.

기본형태

substr(조회 할 컬럼, 시작 위치, 글자 수)

예제

1) 전체 주소에서 앞부분 "시도"에 해당하는 부분만 가져오고 싶을 때

select addr "원래 주소",
       substr(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'

3. CONCAT

원하는 문자 결과가 여러 컬럼에 걸쳐 있을 때 그 값들을 하나로 합치고 싶을때 사용한다

기본형태

concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)

예제

1) 주소의 '시도' 부분과 식당 이름을 '[시도]식당명' 형태로 나타내시오

select restaurant_name "원래 이름",   
       addr "원래 주소",
       concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
from food_orders
where addr like '%서울%'

4. IF

조건에 따라 다른 방법을 적용하고 싶을 때 사용한다. 원하는 조건을 충족할때와 아닐 때 각각 값을 다르게 지정해줄 수 있다.

기본형태

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

예제

1) 음식 타입이 "Korean"이면 "한식", 나머지는 "기타"로 표시하시오

select restaurant_name,
       cuisine_type "원래 음식 타입",
       if(cuisine_type='Korean', '한식', '기타') "음식 타입"
from food_orders

2) 주소를 문곡리에서 문가리로 변경하시오. 이때 주소가 평택군 문곡리인 경우에만 문가리로 변경하시오

select addr "원래 주소",
       if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%'

5. CASE

IF의 경우 한가지 조건에 대해서만 값을 지정할 수 있다. 여러 조건에 대해서 값을 지정해주고 싶다면 CASE를 사용하면 된다. IF의 확장 개념이라고 생각하면 된다

기본형태

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

예제

1) 고객을 나이와 성별에 따라 구분하시오

select 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 '고객 분류', name,age, gender
from customers
where age between 10 and 29

숙제

다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만들어주세요.

  • 주중 : 25분 이상
  • 주말 : 30분 이상
select case when day_of_the_week = "Weekday" then if(delivery_time >=25, "지각", "지각 아님")
			when day_of_the_week = "Weekend" then if(delivery_time >=30, "지각", "지각 아님")
			end "배달 지각 여부",
			day_of_the_week,
			delivery_time
from food_orders

profile
1=850

0개의 댓글