개발/부트캠프

사전캠프 : SQL 3

EJ EJ 2024. 11. 21. 16:00

1.SQL로 가공하기

REPLACE : 특정 문자 변경

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

 

주소의 ‘문곡리'를 ‘문가리'로 바꾸기

replace(addr, '문곡리', '문가리') "바뀐 주소"

 

SUBSTRING or SUBSTR : 특정 문자만 조회

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

글자 수 지정을 안할 경우 생략 가능

 

서울 음식점들의 주소를 전체가 아닌 ‘시도'만 나오도록 수정

substr(addr, 1, 2) "시도"

 

CONCAT : 여러 칼럼의 값을 하나로 합치기

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

 

서울시에 있는 음식점은 ‘[서울] 음식점명'이라고 수정

concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 음식점명"

 

IF : 조건에 따라 다른 방법을 지정

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

 

음식 타입을 ‘Korean'일 때는 ‘한식', ‘Korean'이 아닌 경우에는 ‘기타'라고 지정

if(cuisine_type='Korean', '한식', '기타') "음식 타입"

 

‘문곡리'가 평택에만 해당될 때, 평택 ‘문곡리'만 ‘문가리'로 수정

if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"

 

잘못된 이메일 주소 (gmail)만 수정을 해서 사용

substring(if(email like '%gmail%', replace(email, 'gmail', '@gmail'), email), 10) "이메일 도메인"

 

CASE : 조건을 여러가지 지정

ex) case when 조건1 then 값(수식)1

               when 조건2 then 값(수식)2

               else 값(수식)3 end

else 없을 경우 생략 가능

 

음식 단가를 주문 수량이 1일 때는 음식 가격, 주문 수량이 2개 이상일 때는 음식가격/주문수량으로 지정

case when quantity=1 then price

         when quantity>=2 then price/quantity end "음식 단가"

 

주소의 시도를 ‘경기도'일때는 ‘경기도', ‘특별시'혹은 ‘광역시'일 때는 붙여서, 아닐 때는 앞의 두 글자만 사용

case when addr like '%경기도%' then '경기도'

          when addr like '%특별%' or addr like '%광역%' then substring(addr, 1, 5)

          else substring(addr, 1, 2) end "변경된 주소"

 

2.Data Type 오류 해결하기

data type 이 다를 때 연산이 되지 않을 수 있다. 출력 결과 컬럼명 옆의 ‘ABC’ (뜻 : 문자) 혹은 ‘123’(뜻 : 숫자)을 확인한다. 

따라서 문자, 숫자를 혼합하여 함수에 사용 할 때에는 데이터 타입을 변경한다.

 

-숫자로 변경
cast(if(rating='Not given', '1', rating) as decimal

-문자로 변경
cast(order_id as char)

 

<문제>

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

      주중 25분 이상, 주말 30분 이상

A :

SELECT order_id,

               restaurant_name,

               day_of_the_week,

               delivery_time,

               case when day_of_the_week='Weekday' and delivery_time>=25 THEN 'late'

               when day_of_the_week='Weekend' and delivery_time>=30 THEN 'late'

               else 'On-time' end "배달지연여부"

FROM food_orders

 

'개발 > 부트캠프' 카테고리의 다른 글

사전캠프 : SQL 5_완강  (1) 2024.11.26
사전캠프 : SQL 4  (2) 2024.11.22
사전캠프 : SQL 2  (1) 2024.11.20
사전캠프 : SQL 1  (2) 2024.11.19
사전캠프 : 스타터 노트  (2) 2024.11.18