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 조건으로 넘어가 출고대기로 잘못 분류되는 오류가 발생 할수있다.
'프로그래머스 SQL' 카테고리의 다른 글
| 11.프로그래머스 SQL Lv.3 (있었는데요 없었습니다) (0) | 2026.05.19 |
|---|---|
| 10.프로그래머스 SQL Lv.3 (업그레이드 할 수 없는 아이템 구하기) (0) | 2026.05.19 |
| 8. 프로그래머스 SQL lv.3(조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기) (0) | 2026.05.19 |
| 7.프로그래머스 SQL lv3 (물고기 종류 별 대어 찾기) (0) | 2026.05.11 |
| 6. 프로그래머스 SQL lv.3 ( 조건에 맞는 사용자와 총 거래금액 조회하기 ) (0) | 2026.05.08 |