본문 바로가기
SQL

[MySQL] 프로그래머스 Lv 3. 조건별로 분류하여 주문상태 출력하기 정답풀이

by 권미정 2023. 8. 12.

문제 설명

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

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

 

문제

FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.

 

정답 코드

-- 조건별로 분류하여 주문상태 출력하기
SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d'),
  CASE WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
  WHEN OUT_DATE > '2022-05-01' THEN '출고대기'
  ELSE '출고미정'   
  END AS 출고여부   
FROM FOOD_ORDER
ORDER BY 1;

 

코드 해석

FOOD_ORDER 테이블에서 주문 ID, 제품 ID, 출고일자, 출고여부를 조회한다.

이때, 출고일자의 DATE_FORMAT은 ‘2022-03-16’과 같이 ‘%Y-%m-%d’의 형식으로 출력하게 하고, 출고여부는 CASE WHEN 구문을 써서 출고일자가 ‘2022-05-01’ 까지 ‘출고완료’로 이후 날짜는 ‘출고대기’로 나머지 경우는 ‘출고미정’으로 나오게 하고 컬럼명은 ‘출고여부’로 지정한다.

결과는 주문 ID를 기준으로 오름차순 정렬하는 코드이다.

 

결과

 

느낀 점/어려운 점/개선점

SELECT 절에 CASE WHEN을 써야 하는 문제는 처음이라서 순간 당황하긴 했는데, CASE WHEN은 많이 사용해 본 구문이라서 쉽게 풀 수 있었다.

댓글