문제 링크
# Write your MySQL query statement below
SELECT round(avg(b.order_type)*100, 2) as immediate_percentage
FROM (SELECT *,
CASE
WHEN order_date = customer_pref_delivery_date THEN 1
ELSE 0
END as order_type
from Delivery
WHERE (customer_id, order_date) in (SELECT customer_id,MIN(order_date) from delivery group by customer_id)
) b
📌핵심 Point
- WHERE IN 절에서 서브쿼리를 쓸때는, 칼럼들이 align되어야함. in 서브쿼리에서 customer_id와 order_date를 썼으므로, 앞에도 괄호의 형태로 맞춰줌
(customer_id, order_date)
- 칼럼값별로 이진분류하여 그 비율을 계산할때는, 0과 1로 매핑되게 한 후 평균을 내면 된다. 나는 또다른 서브쿼리로 해결했지만, CASE WHEN 쓰지 않고 다이렉트로 SELECT avg(order_date = customer_pref_delivery_date) 이런식으로 쓰면 더욱 간단히 풀이 가능.
CASE WHEN ELSE END
는 SELECT 절의 목적어로 쓰면 됨!!