데이터 공부/SQL

[LeetCode] 1174. Immediate Food Delivery II (Where절 Subquery, 집계함수)

민몽 2024. 8. 12. 22:27
📖 문제

 

각 고객들의 첫번째 주문에 대한 Immediate orders 비율 구하기

- 주문 날짜 = 고객 선호 날짜이면,  Immediate

- 주문 날짜 != 고객 선호 날짜이면, scheduled

🔗Link : https://leetcode.com/problems/immediate-food-delivery-ii/

 

👀 What I Learned

 

1. 제일 처음 막혔던 부분은 각 고객들의 첫번째 주문에 대해 구하는 부분이었다. 

   행 기준으로만 생각해서 어떻게 상위 첫번째 행만 추출할 수 있을까? 고민하다가

   그렇게 하면 order_date를 또 정렬해야해서 비효율적이라고 판단했다.

   WHERE 절 서브쿼리와 MIN 함수를 활용해 필요한 부분만 추출할 수 있었다 !

 

2. AVG(boolean expressions) 

   문제를 풀고나면 Solutions를 보면서 다른 사람들의 풀이와 비교해보는 편인데,

   SUM 함수나 AVG 함수 등 집계 함수 안에 조건식을 넣어서 계산할 수 있다는 걸 발견했다 ! 

   원리를 알고싶어서 공식문서나 구글링을 해봤는데 정확한 설명이 없어서 직접 하나씩 확인해보기로 했다.

SELECT delivery_id, order_date=customer_pref_delivery_date
FROM Delivery

   

이렇게 IF(expression,1,0) 을 사용하지 않고, 조건문만 쓰더라도 True면 1, False면 0을 반환하는 것을 알 수 있다.

IF문보다 가독성도 좋은 것 같고, 더 효율적인 것 같아서 앞으로 자주 활용할 예정이다 !

📖 풀이 과정
SELECT ROUND(AVG(order_date=customer_pref_delivery_date)*100,2) as immediate_percentage
FROM Delivery
WHERE (customer_id, order_date) IN(
    SELECT customer_id, min(order_date)
    FROM Delivery
    GROUP BY customer_id
)