< 1 > IF |
[1] 함수명 : if
[2] 사용 방법
if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
[예시 1]
select restaurant_name,
cuisine_type "원래 음식 타입",
if(cuisine_type='Korean', '한식', '기타') "음식 타입"
from food_orders
해석 |
만약 cuisine_type 이 Korean 이면 컬럼을 '한식' 으로 해주고, 그렇지 않은 컬럼은 '기타'로 표시한다. |
[예시 2] '문곡리'가 평택에만 해당될 때, 평택 '문곡리'만 '문가리'로 수정
select addr "원래주소",
if(addr like '%평택군%' replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%'
[예시 3] 이메일 도메인에서 잘못된 이메일 주소 (gmail) 만 수정을 해서 사용
select substring(if(email like '%email%', replace(email, 'gmail', '@gmail'), email), 10),
count(customer_id) "고객 수",
avg(age) "평균 연령"
from customers
group by 1
< 2 > CASE |
조건을 여러가지 지정하고 싶을 때 사용한다.
조건별로 지정을 해주기 때문에 if 문을 여러 번 쓴 효과를 낼 수 있다.
case(조건1, 값1, case(조건2, 값2, 값3))
[1] 함수명 : case
[2] 사용 방법
case when 조건1 then 값(수식)1
when 조건2 then 값(수식)2
else 값(수식)3
end
[예시 1] 음식 타입을 'Korean' 일 때는 '한식', 'Japanese' 혹은 "Chinese' 일 때는 '아시아', 그 외에는 '기타'라고 지정
select case when cuisine_type='Korean' then '한식'
when cuisine_type= in ('Japanese', 'Chinese') then '아시아'
else '기타' end "음식 타입",
cuisine_type
from food_orders
[예시 2] 음식 단가를 주문 수량이 1일 때는 음식 가격, 주문 수량이 2개 이상일 때는 음식가격/주문수량으로 지정
select order_id,
price,
quantity,
case when quantity=1 then price
when quantity>=2 then price/quantity end "음식 단가"
from food_orders
< 3 > 조건을 사용할 수 있는 경우 |
[1] 새로운 카테고리 만들기
음식 타입과 같이 새로운 카테고리를 만들 수 있다.
(예) 한국 음식, 아시아 음식, 미국 음식, 유럽 음식
고객들의 분류도 만들 수 있다.
(예) 10대 여성, 10대 남성, 20대 여성, 20대 남성 등
[2] 연산식을 적용할 조건 지정하기
수수료를 계산할 때, 현금 사용과 카드 사용 등으로 나눌 수 있다.
현금일 때와 카드일 때의 수수료율이 다르다면, if 문 또는 case 문을 사용하여 각각 다른 수수료율 혹은 수수료 계산 방식을 적용할 수 있다.
[3] 다른 문법 안에서 적용하기
if , case 문 안에 다른 문법이나 연산을 넣을 수도 있지만, 다른 문법 안에 조건문을 넣을 수 있다.
< 4 > 숫자 계산이나 문자 가공 시 자주 발생하는 오류 알아보기 |
다른 SQL 문법에서는 data type 이 다를 때 연산이 되지 않을 수 있음.
문자, 숫자를 혼합하여 함수에 사용할 때에는 데이터 타입을 변경해줘야 한다.
-- 숫자로 변경
cast(if(rating='Not given', '1', rating) as decimal)
-- 문자로 변경
concat(restaurant_name, '-', cast(order_id as char))