상세 컨텐츠

본문 제목

#10. 문제 풀이 - 배달 시간 판단

내일배움캠프 학습/SQL

by 남민우_ 2024. 10. 25. 00:29

본문

문제

다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만들어라

* 주중 : 25분 이상

* 주말 : 30분 이상

1. SQL 문의 기본 구조로 시작

2. 조건을 여러번 적용할 때 if, case 문 중 어떤 것을 이용할지 결정

3. 조건에 '주중, 주말' 조건과 '배달시간' 조건을 동시에 줄 때 사용 할 논리연산자 결정

 

풀이

1번부터 내용을 보면 SQL의 기본 구조로 시작하라고 안내한다.

배달 시간을 판단하기 위한 문제이므로 테이블은 'food_orders' 를 이용한다.

SELECT *
FROM food_orders fo

 

2번에서는 조건을 여러번 적용할 때, if와 case 문 중 어떤 것을 사용하겠냐 묻고 있는데

이는 지난번 배웠던 것처럼 조건이 여러개일 경우는 case 문을 사용하면 된다.

 

코드를 작성하면서 조건문의 내용을 한번에 적기 위해 3번도 같이 살펴본다.

'주중, 주말' 조건과 '배달시간' 조건을 동시에 줄 때 사용할 논리연산자를 결정하라고 한다.

조건을 동시에 줄 때는 and 키워드를 사용하면 된다.

 

따라서 2번과 3번까지 모두 적용한 코드는 다음과 같다.

SELECT CASE WHEN delivery_time >= 30 and day_of_the_week = 'Weekend' then 'Late'
		WHEN delivery_time >= 25 and day_of_the_week = 'Weekday' then 'Late'
		else 'On-time'
		end as '지연 여부'
FROM food_orders fo

코드에서는 배달시간(delivery_time) 이 30분 이상이면서 날짜(day_of_the_week) 가 주말(Weekend) 일 때와

배달시간이 25분 이상이면서 날짜가 평일일 때를 구분지었고 조건이 충족될 경우 배달시간이 늦은 것으로 판단, 결과는 'Late' 로 출력하도록 했다.

 

배달 시간이 늦지 않았을 경우는 모두 else 로 처리해 'On-time' 이라고 표기하도록 한다.

이 case 문을 마치기 위해 end 키워드를 적고 컬럼명을 '지연 여부' 로 표시해주었다.

 

다만 여기서 추가적으로, 결과물 예시를 보면 다음과 같이

지연여부 외에도 다른 컬럼들이 보인다.

이를 같이 출력하도록 한다.

 

따라서 최종 코드는 다음과 같다.

SELECT order_id,
	restaurant_name,
	day_of_the_week,
	delivery_time,
	CASE WHEN delivery_time >= 30 and day_of_the_week = 'Weekend' then 'Late'
		WHEN delivery_time >= 25 and day_of_the_week = 'Weekday' then 'Late'
		else 'On-time'
		end as '지연 여부'
FROM food_orders fo

 

실행 결과

'내일배움캠프 학습 > SQL' 카테고리의 다른 글

#9. DATA TYPE 오류 확인  (3) 2024.10.23
#8. IF/CASE 실습  (0) 2024.10.23
#7. IF/CASE 문법  (3) 2024.10.23
#6. 문자 데이터 가공 실습  (2) 2024.10.18
#5. 문자 데이터 가공 - 형태 변화  (1) 2024.10.18

관련글 더보기