데이터베이스/mysql

mysql-조건문,if,case

nyeongha 2023. 12. 19. 13:15

조건에 따라 다른 연산을 해야할때가 있다.

할증료를 계산할때,조건을 세워보자.

지역 : 서울, 기타 - 서울일 때는 음식값의 10%추가, 기타일 때는 없음

시간 : 25분, 30분 - 25분 초과하면 음식 가격의 5%, 30분 초과하면 음식 가격의 10%추가

 

일단 지역의 경우로 나누는건 2가지로 나뉜다.

첫번째는 '서울'의 경우

두번째는 그 외(기타)의 경우

이런경우는 if를 사용한다.

if 문의 형식은 아래와 같다.

if(조건절,조건절이 참일경우 수행,조건절에 부합할때 수행)

그럼 위의 형식에 따라 지역 조건문을 작성해보자

if(address like '%서울%',0.1,0)

 

그 다음은 시간에 따라 조건문을 작성해보자.

시간의 경우 세가지로 나뉜다.

첫번째는 25분 초과시

두번째는 30분 초과시

세번째는 그 외

이런경우 if문보다는 case when문을 작성하는것이 좋다.

case문의 형식은 아래와 같다.

case
when 조건절 then 수행절
-- when만 여러번 가능
else
end

이 형식에 맞춰 시간 조건문을 작성해보자

case
when delivery_time>30 then price*0.1
when delivery_time>25 then price*0.05
else 0
end

 

두가지 식을 합치면 아래와 같다.

case
when delivery_time>30 then price*(0.1+(if(addr like '%서울%', 0.1, 0)))
when delivery_time>25 then price*(0.05+(if(addr like '%서울%', 0.1, 0)))
else price*(if(addr like '%서울%', 0.1, 0))
end

 

이제 주문번호별 음식요금과 수수료,이 두가지를 합친 총요금을 산출해보자

select order_id "주문번호",concat(price,'원') "요금",concat(plus,'원') "수수료",concat(price+plus,'원') as "총요금"
from
(select order_id,price,
case
when delivery_time>30 then price*(0.1+(if(addr like '%서울%', 0.1, 0)))
when delivery_time>25 then price*(0.05+(if(addr like '%서울%', 0.1, 0)))
else price*(if(addr like '%서울%', 0.1, 0))
end as plus
from food_orders)AS calculated_columns;

 

subquery에 대해 알고싶다면 아래 게시물을 클릭해주세요.

2023.12.19 - [데이터베이스/mysql] - mysql-subquery사용하여 연산하기