SQL
CASE/IF문 실습
hyungminjeon
2024. 5. 31. 17:31
[문제 1]
-- [실습] 지역과 배달시간을 기반으로 배달수수료 구하기 (식당 이름, 주문 번호 함께 출력)
-- (지역 : 서울, 기타 - 서울일 때는 수수료 계산 * 1.1, 기타일 때는 곱하는 값 없음
-- 시간 : 25분, 30분 - 25분 초과하면 음식 가격의 5%, 30분 초과하면 음식 가격의 10%)
[해결]
select case when delivery_time > 25 and delivery_time <30 then price*0.05 *
if(addr like '서울%', 1.1, 1)
when delivery_time > 30 then price*0.1 *
if(addr like '서울%', 1.1, 1)
else 0 end '수수료',
restaurant_name,
price,
delivery_time,
addr
from food_orders
시간조건이 0분에서 25분, 25분 초과, 30분 초과의 3가지 조건으로 주어지므로 case문을 사용하여 각각의 조건을 분류하였고 지역에 따른 두가지 수수료 조건(서울,기타지역)을 연산하기 위하여 각각의 case문에 if조건문을 곱하여 주는 형태로 쿼리를 작성하였다.
[문제 2]
-- 다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만들어주세요.
-- 주중 : 25분 이상
-- 주말 : 30분 이상
-- SQL 문의 기본 구조로 시작
-- 조건을 여러번 적용할 때 if, case 문 중 어떤 것을 이용할지 결정
-- 조건에 ‘주중, 주말’ 조건과 ‘배달시간’ 조건을 동시에 줄 때 사용 할 논리연산자 결정
[해결]
select order_id,
restaurant_name,
day_of_the_week,
delivery_time,
case when day_of_the_week = 'Weekday' then if(delivery_time >=25, 'Late', 'On-time')
when day_of_the_week = 'Weekend' then if(delivery_time >=30, 'Late', 'On-time')
END '지연여부'
from food_orders
문제1과 비슷한 방식으로 먼저 주말과 주중으로 case문을 나누어 작성한 뒤, 각각의 case문에 배달시간이 25분 이상인 경우와 30분 이상인 경우를 if문을 사용하여 곱해주었다.
[정리 및 새롭게 알게 된 점]
두 실습문제를 통해 여러조건이 주어졌을 때 case문과 if문을 함께 사용하여 SQL 쿼리를 작성하는 법을 익힐 수 있었다.