데이터 분석

흐름을 읽고
인사이트를 만든다.

9.프로그래머스 SQL lv.3 (조건별로 분류하여 주문상태 출력하기)

2026. 5. 19. 11:41프로그래머스 SQL

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

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

 

문제 파악

1. 문제 예시 출력 형식을 보면 YYYY-MM-DD 형태이므로 DATE_FORMAT 함수를 사용.

2. CASE WHEN 을 이용햇 2022년 5월 1일을 기준으로 3가지 조건을 나눈다.

 

  • OUT_DATE가 NULL이면  출고미정
  • OUT_DATE가 2022-05-01 이하이면 출고완료
  • 그 외(2022-05-01 이후)이면 출고대기

3. 오름차순 정렬

 

해결 과정

1.SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE

= 테이블 두개를 가져오고  DATE_FORMAT(OUT_DATE, '%Y-%m-%d') 를 이용해 YYYY-MM-DD 형식으로 포맷팅

2. CASE WHEN 문을 이용해 3가지 조건별 출력 여부 작성

3. 오름차순 정렬

 

답변

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

 

CASE WHEN 문을 사용할때 조건의 우선순위와 NULL 처리의 중요성을 배울 수 있었다.

NULL 체크를 먼저 하지 않고 날짜 비교를 먼저 했으면 데이터가 ELSE 조건으로 넘어가 출고대기로 잘못 분류되는 오류가 발생 할수있다.