[3주차 숙제]
다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만드시오.
-주중: 25분 이상
-주말: 30분 이상
<나의 답안>
select case when day_of_the_week='Weekday' and delivery time<25 then 'On-time'
when day_of_the_week='Weekday' and delivery time>=25 then 'Late'
when day_of_the_week='Weekend' and delivery time<30 then 'On-time'
when day_of_the_week='Weekend' and delivery time>=30 then 'Late' end "지연여부",
Order_id,
restaurant_name,
day_of_the_week,
delivery_time
from food_orders
<교재 답안>
select Order_id,
restaurant_name,
day_of_the_week,
delievery_time,
case when day_of_the_week='Weekday' and delivery_time>=25 then 'Late'
when day_of_the_week='Weekend' and delivery_time>=30 then 'Late'
else 'On-time' end "지연여부"
from food_orders
[여러 번의 연산을 한 번의 SQL 문으로 수행하는 Subquery]
1. Subquery가 필요한 경우
1) 여러 번의 연산을 수행해야 할 때
2) 조건문에 연산 결과를 사용해야 할 때
3) 조건에 Query 결과를 사용하고 싶을 때
select column1, special_column
from
(
select coulumn1, column2 special_column
from table1
) a
[실습-Subquery문 안을 수정해서, 음식 준비시간이 25분보다 초과한 시간을 가져오기]
select order_id, restaurant_name if(over_time>=0, overtime, 0) over_time
from
(
select order_id, restaurant_name, food_preparation_time-25 over_time
from food_orders
) a
[실습2-음식점의 지역과 평균 배달시간으로 segmentation하기]
select restaurant_name,
sido,
avg_delivery_time
case when avg_delivery_time<=20 then '<=20'
when avg_delivery_time>20 and avg_delivery_time<=30 then '20<x<=30'
else '>30' end delivery_time_segment
from
(
select restaruant_name,
substr(addr, 1, 2) sido,
avg(delivery_time) avg_delivery_time
from food_orders
group by 1, 2
) a
[실습 3]
음식점의 총 주문수량과 주문 금액을 연산하고, 주문수량을 기반으로 수수료 할인률 구하기
*할인조건
1. 수량이 5개 이하: 10%
2. 수량이 15개 초과, 총 주문금액이 300000 이상: 0.5%
3. 그 외: 일괄 1%
select restaurant_name,
total_quantity,
total_price,
case when total_quantity<=5 then 0.1
when total_quantity>15 and total_price>=300000 then 0.005
else 0.01 end "수수료 할인률"
from
(
select restaurant_name,
sum(quantity) total_quantity,
sum(price) total_price,
from food_orders
group by 1
) a