📖 문제
각 고객들의 첫번째 주문에 대한 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
)
'데이터 공부 > SQL' 카테고리의 다른 글
[프로그래머스] 조건에 맞는 사용자 정보 조회하기 CONCAT_WS (0) | 2024.10.14 |
---|---|
[LeetCode] 1204.Last Person to Fit in the Bus (From 절 Subquery, 누적합) (0) | 2024.08.22 |
[LeetCode] 550. Game Play Analysis IV (Where절 Subquery) (0) | 2024.08.13 |
[LeetCode] 1280. Students and Examinations (CROSS JOIN, LEFT JOIN) (0) | 2024.08.07 |
[MYSQL] LEAG, LAG (0) | 2023.01.12 |