[String, Date] 조건별로 분류하여 주문상태 출력하기

2024. 9. 28. 18:00SQL 고득점 Kit/String, Date

https://school.programmers.co.kr/learn/courses/30/lessons/131113

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명
다음은 식품공장의 주문정보를 담은 FOOD_ORDER 테이블입니다.

FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE, OUT_DATE, FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문양, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.

Column name Type Nullable
ORDER_ID VARCHAR(10) FALSE
PRODUCT_ID VARCHAR(5) FALSE
AMOUNT NUMBER FALSE
PRODUCE_DATE DATE TRUE
IN_DATE DATE  
OUT_DATE DATE TRUE
FACTORY_ID VARCHAR(10) FALSE
WAREHOUSE_ID VARCHAR(10) FALSE

문제
FOOD_ORDER 테이블에서 2022년 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요.

출고여부는 2022년 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.


예시
FOOD_ORDER 테이블이 다음과 같을 때

ORDER_ID PRODUCT_ID AMOUNT PRODUCE_DATE IN_DATE OUT_DATE FACTORY_ID WAREHOUSE_ID
OD00000051 P0002 4000 2022-04-01 2022-04-21 2022-04-21 FT19970003 WH0005
OD00000052 P0003 2500 2022-04-10 2022-04-27 2022-04-27 FT19970003 WH0006
OD00000053 P0005 6200 2022-04-15 2022-04-30 2022-05-01 FT19940003 WH0003
OD00000054 P0006 1000 2022-04-21 2022-04-30 NULL FT19940003 WH0009
OD00000055 P0008 1500 2022-04-25 2022-05-11 2022-05-11 FT19980003 WH0009


SQL을 실행하면 다음과 같이 출력되어야 합니다.

ORDER_ID PRODUCT_ID OUT_DATE 출고여부
OD00000051 P0002 2022-04-21 출고완료
OD00000052 P0003 2022-04-27 출고완료
OD00000053 P0005 2022-05-01 출고완료
OD00000054 P0006   출고미정
OD00000055 P0008 2022-05-11 출고대기

2022년 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회해 출력하는 문제입니다.

 

2022년 5월 1일보다 출고 날짜가 빠르다면 출고완료를, 늦다면 출고대기를, 없다면 출고미정으로 출력하도록 CASE WHEN 구문을 사용하는 문제입니다. 그리고 OUT_DATE 역시 날짜 포맷을 변경해줘야 하고요.

 

정답 코드를 작성해보겠습니다.

  SELECT ORDER_ID, PRODUCT_ID, 
         DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE,
         CASE
              WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
              WHEN OUT_DATE > '2022-05-01' THEN '출고대기'
              WHEN OUT_DATE IS NULL THEN '출고미정'
         END AS "출고여부"
    FROM FOOD_ORDER
ORDER BY ORDER_ID ASC;

 

3가지 조건에 따라서 출고완료, 출고대기, 출고미정을 분류하도록 설정하면 됩니다.