본문 바로가기
하루하루/SQL 문제풀이

[프로그래머스/Oracle] 131113. 조건별로 분류하여 주문상태 출력하기

by 키튼햄 2023. 12. 15.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131113?language=oracle

 

 

 

 

풀이

조건1. 

FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회

 

SELECT  ORDER_ID, PRODUCT_ID, OUTDATE, "출고여부"

FROM FOOD_ORDER

 

이때, OUT_DATE가 YYYY-MM-DD HH-mm-ss 형식으로 나오기 때문에 YYYY-MM-DD 형식으로 조회하기 위해서는 TO_CHAR( OUT_DATE, 'YYYY-MM-DD' ) AS OUT_DATE 라고 해준다.

 

따라서, 

SELECT  ORDER_ID, PRODUCT_ID, TO_CHAR( OUT_DATE, 'YYYY-MM-DD' ) AS OUT_DATE  , "출고여부"

FROM FOOD_ORDER

 

 

조건2.

출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력

 

>> CASE WHEN을 사용하여 조건을 만족하는 컬럼을 새로 만든다.

 

1) 출고완료는 OUT_DATE가 2022-05-01 보다 전의 날짜여야한다.

WHEN OUT_DATE <= TO_DATE('2022-05-01', 'YYYY-MM-DD') THEN '출고완료'

 

2) 출고미정과 출고대기. 출고대기보다는 출고미정이 NULL 값인 ROW 값을 구하면 되기 때문에 더 조건을 주기 편하므로 출고미정을 조건으로 주고 나머지를 출고대기로 만든다.

WHEN OUT_DATE IS NULL THEN '출고미정'

ELSE '출고대기'

 

3) 새로만든 컬럼 이름(별칭)을 지정한다.

END AS "출고여부"

 

 

조건3.

주문 ID를 기준으로 오름차순 정렬

 

ORDER BY ORDER_ID ASC;

 

 

순서는

SELECT [컬럼명]

FROM [테이블명]

WHERE [조건]   <= 여기서는 조건문이 없다.

ORDER BY [컬럼명] [ASC/DESC] 순으로 정렬해준다.

 

 

코드

SELECT ORDER_ID, 
       PRODUCT_ID, 
       TO_CHAR(OUT_DATE, 'YYYY-MM-DD') AS OUT_DATE, 
       CASE
         WHEN OUT_DATE <= TO_DATE('2022-05-01', 'YYYY-MM-DD') THEN '출고완료'
         WHEN OUT_DATE IS NULL THEN '출고미정'
         ELSE '출고대기'
       END AS "출고여부"
FROM FOOD_ORDER 
ORDER BY ORDER_ID ASC;

 

 

실행결과