데이터베이스/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사용하여 연산하기