문제
Brazilian E-Commerce Public Dataset by Olist 데이터셋은 브라질의 이커머스 웹사이트인 Olist Store의 판매 데이터 입니다.
그 중 olist_orders_dataset 테이블에는 주문 ID, 고객 ID, 주문 상태, 구매 시각 등 주문 내역 데이터가 들어있습니다.
종종 택배사에 물건을 보내 배송 시작이 되었는데, 고객에게 택배가 도착하지 않는 일이 있습니다.
이런 경우 order_delivered_carrier_date 컬럼에 택배사 도착 시각은 기록되지만, order_delivered_customer_date 컬럼의 값은 null으로 저장됩니다.
일단 원인을 파악하기 전에 이런 일들이 얼마나 발생하고 있는지 현황 파악을 해보려고 합니다.
2017년 1월 한 달 동안 택배사에 전달되었지만 배송 완료는 되지 않은 주문 건수를 택배사 도착일을 기준으로 집계하는 쿼리를 작성해주세요.
쿼리 결과는 택배사 도착일을 기준으로 오름차순 정렬되어야 하고, 아래 컬럼을 포함해야 합니다.
delivered_carrier_date - 택배사 도착 날짜 (예: 2017-01-16)
orders - 택배사에 도착했지만, 고객에게 배송되지 않은 주문 건 수
또한 위 서술에 해당하는 주문이 없었던 날은 출력에서 제외해주세요.
예를 들어, 2017년 1월 1일에는 택배사에 전달되었지만, 배송 완료가 되지 않은 주문은 없습니다.
이 날은 SQL 실행 결과에 포함되지 않아야 합니다.
https://solvesql.com/problems/shipment-in-bermuda/
문제 풀이
SELECT DATE(order_delivered_carrier_date) AS delivered_carrier_date, -- 택배사 도착 날짜만 추출
COUNT(*) AS orders -- 일자별 주문 수 계산
FROM olist_orders_dataset
WHERE order_delivered_carrier_date LIKE '2017-01%' -- 2017년 1월에 택배사에 전달되었지만,
AND order_delivered_customer_date IS NULL -- 배송 완료되지 않은 주문 필터링
GROUP BY delivered_carrier_date
ORDER BY delivered_carrier_date; -- 일자 오름차순 정렬
SQL을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.