관련 설명 :
https://velog.io/@dyllis_lin/MySQL-%EA%B8%B0%EB%A1%9D4
SELECT order_id, restaurant_name,
IF(over_time >= 0, over_time, 0) over_time
FROM
(
SELECT order_id, restaurant_name, food_preparation_time - 25 AS over_time
FROM food_orders
) a
SELECT restaurant_name
,price_per_plate * ratio_of_add AS "수수료"
FROM
(
SELECT restaurant_name,
CASE WHEN price_per_plate < 5000 THEN 0.005
WHEN price_per_plate BETWEEN 5000 AND 19999 THEN 0.01
WHEN price_per_plate BETWEEN 20000 AND 29999 THEN 0.02
ELSE 0.03
END AS ratio_of_add,
price_per_plate
FROM
(
SELECT restaurant_name, AVG(price / quantity) AS price_per_plate
FROM food_orders fo
GROUP BY restaurant_name
) AS a
) AS b
SELECT restaurant_name,
adress,
CASE WHEN avg_time <= 20 THEN '<= 20'
WHEN avg_time > 20 AND avg_time <= 30 THEN '20 < x <= 30'
WHEN avg_time >30 THEN '> 30' END AS "time_segment"
FROM
(
SELECT restaurant_name,
SUBSTR(addr, 1, 2) AS "adress",
AVG(delivery_time) AS "avg_time"
FROM food_orders
GROUP BY 1, 2
) a
SELECT cuisine_type
, total_quantity
, count_res
, CASE WHEN count_res >= 5 AND total_quantity >= 30 THEN 0.0005
WHEN count_res >= 5 AND total_quantity < 30 THEN 0.008
WHEN count_res < 5 AND total_quantity >= 30 THEN 0.01
WHEN count_res < 5 AND total_quantity < 30 THEN 0.02
END AS "discount_rate"
FROM
(
SELECT cuisine_type
, SUM(quantity) AS total_quantity
, COUNT(DISTINCT restaurant_name) AS count_res
FROM food_orders
GROUP BY cuisine_type
) a;
SELECT restaurant_name
, CASE WHEN total_quantity < 5 THEN 0.1
WHEN total_quantity > 15 AND sum_of_price >= 300000 THEN 0.05
ELSE 0.1
END AS "discount_rate"
FROM
(
SELECT restaurant_name
, SUM(quantity) AS "total_quantity"
, sum(price) AS "sum_of_price"
FROM food_orders fo
GROUP BY 1
) a;
SELECT fo.order_id
, fo.restaurant_name
, fo.price
, p.vat
, (fo.price * p.vat) AS "수수료"
FROM food_orders fo
INNER JOIN payments p ON fo.order_id = p.order_id
수수료율이 있는 경우에만 조회하라고 했기 때문에 INNER JOIN 사용(교집합!)
오늘의 TMI
SQL은 하면 할수록 쉬우면서 어려운것 같다...........ㅋㅋㅋㅋ