반응형

@notepad_jj2

츄르사려고 코딩하는집사입니다.


1. [solvesql] 배송 예정일 예측 성공과 실패 SQLite

 

2. 문제 출처

https://solvesql.com/problems/estimated-delivery-date/

 

solvesql

© Copyright 2021-2022 solvesql.com

solvesql.com

 

3. 풀이

- 이 문제는 CASE WHEN TEHN 구문만 잘 사용하면 된다.

- 먼저, OLIST_ORDERS_DATASET 테이블에서 2017년 1월 데이터만 뽑아낸다.

- 그리고, ORDER_PURCHASE_TIMESTAMP 컬럼을 기준으로 년월일 기준으로 GROUP BY를 한다.

- 각 연월일 별로, ORDER_DELIVERED_CUSTOMER_DATE가 ORDER_ESTIMATED_DELIVERY_DATE(배송예정일) 보다 작은 경우(배송예정일보다 빨리 배송완료를 한 경우) 에 ORDER_ID의 갯수를 가져오고,

- 각 연월일 별로, ORDER_DELIVERED_CUSTOMER_DATE가 ORDER_ESTIMATED_DELIVERY_DATE(배송예정일) 보다 크거나 같은 경우(배송예정일보다 빨리 배송완료를 하지 못한 경우) 에 ORDER_ID의 갯수를 가져와서 각 SUCCESS, FAIL를 구분하면 된다.

- 마지막 정렬은 구매한 날짜를 기준으로 정렬하면 된다.

 

 

4. 소스 코드

  SELECT STRFTIME('%Y-%m-%d', ORDER_PURCHASE_TIMESTAMP) AS "purchase_date"
       , COUNT(CASE WHEN STRFTIME('%Y%m%d', ORDER_DELIVERED_CUSTOMER_DATE) < STRFTIME('%Y%m%d', ORDER_ESTIMATED_DELIVERY_DATE) THEN ORDER_ID END) AS "success"
       , COUNT(CASE WHEN STRFTIME('%Y%m%d', ORDER_DELIVERED_CUSTOMER_DATE) >= STRFTIME('%Y%m%d', ORDER_ESTIMATED_DELIVERY_DATE) THEN ORDER_ID END) AS "fail"
    FROM OLIST_ORDERS_DATASET
   WHERE STRFTIME('%Y%m', ORDER_PURCHASE_TIMESTAMP) = '201701'
GROUP BY STRFTIME('%Y%m%d', ORDER_PURCHASE_TIMESTAMP)
ORDER BY "purchase_date"

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기