728x90
문제
- 고객 별 첫 번째 주문일자 기준 선호하는 배달 방식이 'immediate'인 고객의 백분율 구하기
- order_date 와 customer_pref_delivery_date가 같은 경우, 'immediate'
- order_date 와 customer_pref_delivery_date가 다른 경우, 'scheduled'
테이블
Delivery | delivery_id | customer_id | order_date | customer_pref_delivery_date |
1 | 1 | 2025-08-01 | 2025-08-02 | |
2 | 2 | 2025-08-02 | 2025-08-02 | |
3 | 1 | 2025-08-11 | 2025-08-12 | |
4 | 3 | 2025-08-24 | 2025-08-24 | |
5 | 3 | 2025-08-21 | 2025-08-22 | |
6 | 2 | 2025-08-11 | 2025-08-13 | |
7 | 4 | 2025-08-09 | 2025-08-09 |
- 각 고객 별로 첫 번째 주문일자 행의 order_date와 customer_pref_delivery_date만 비교해보면 됨.
- (customer_id = 1) scheduled
- (customer_id = 2) immediate
- (customer_id = 3) scheduled
- (customer_id = 4) immediate
- 전체 4명의 고객 중 선호 배달 방식이 'immediate'인 고객은 2명으로 백분율은 (2 / 4) * 100 = 50.00
풀이과정
▶ AVG(조건문) 사용 정답
# 고객 별 첫 번째 주문일자 행만 추출하기
- WHERE 조건절에 IN() 함수 및 서브쿼리 활용
- (고객 별, 주문일자) 조합이 서브쿼리 결과테이블 정보에 포함되는 경우만 추출.
- IN() 함수 내에 작성한 서브쿼리는 고객 별 첫 주문일자(MIN함수 활용)를 반환하고 있음.
# 'immediate' 비율 구하기
- WHERE 조건절에 대한 결과로 '고객 별 첫 주문 일자' 관련 데이터만 테이블로 추출된 상태
- AVG() 함수를 사용해 전체 중 order_date와 customer_pref_delivery_date가 같은 경우의 비율을 구함.
- 백분율 형식을 위해 *100 해줌.
# 정답
- ROUND() 함수로 결과값을 소수점 둘째자리로 맞춤.
1
2
3
|
SELECT ROUND(AVG(order_date=customer_pref_delivery_date)*100, 2) immediate_percentage
FROM Delivery
WHERE (customer_id, order_date) IN(SELECT customer_id, MIN(order_date) FROM Delivery GROUP BY customer_id)
|
cs |
다른 사람 풀이 참고
▶ AVG(DATEDIFF(날짜1, 날짜2)=0) 사용 정답
# 고객 별 첫 번째 주문일자 행만 추출하기
- 이 부분은 동일
# 'immediate' 비율 구하기
- WHERE 조건절에 대한 결과로 '고객 별 첫 주문 일자' 관련 데이터만 테이블로 추출된 상태
- AVG() 함수 내에 DATEDIFF() 함수를 사용해 order_date와 customer_pref_delivery_date의 차이가 0인 경우의 비율을 구함.
- 백분율 형식을 위해 *100 해줌.
# 정답
- ROUND() 함수로 결과값을 소수점 둘째자리로 맞춤.
1
2
3
|
SELECT ROUND(AVG(DATEDIFF(order_date, customer_pref_delivery_date)=0)*100, 2) immediate_percentage
FROM Delivery
WHERE (customer_id, order_date) IN(SELECT customer_id, MIN(order_date) FROM Delivery GROUP BY customer_id)
|
cs |
728x90
'데이터분석 과정 > SQL' 카테고리의 다른 글
MySQL 리트코드 | Biggest Single Number (WHERE절, FROM절 서브쿼리) (0) | 2025.04.03 |
---|---|
MySQL 리트코드 | Game Play Analysis IV (DATE_ADD 함수, DATE_SUB 함수) (0) | 2025.04.02 |
MySQL 리트코드 | Monthly Transactions I (DATE_FORMAT 함수_날짜 형식 지정) (0) | 2025.03.31 |
MySQL 리트코드 | Not Boring Movies (%, MOD함수) (0) | 2025.03.28 |
MySQL 리트코드 | Confirmation Rate (AVG 함수 내 조건문 사용법) (0) | 2025.03.27 |
댓글