본문 바로가기
알고리즘/SQL

[MySQL/Oracle] 조건별로 분류하여 주문상태 출력하기 L3

by 모두의 향연 2023. 12. 3.
728x90
반응형
문제설명

다음은 식품공장의 주문정보를 담은 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 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.

 

예시

FOOD_ORDER 테이블이 다음과 같을 때

 

결과

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

 

MySQL
SELECT order_id,
       product_id,
       Date_format(out_date, '%Y-%m-%d'),
       IF (out_date <= '2022-05-01', '출고완료',
       IF(out_date IS NULL, '출고미정', '출고대기')) AS 출고여부
FROM   food_order
ORDER  BY order_id

 

Oracle
SELECT order_id,
       product_id,
       To_char(out_date, 'YYYY-MM-DD') OUT_DATE,
       CASE
         WHEN To_char(out_date, 'YYYY-MM-DD') <= '2022-05-01' THEN '출고완료'
         WHEN out_date IS NULL THEN '출고미정'
         ELSE '출고대기'
       END 출고여부
FROM   food_order
ORDER  BY order_id

TIP : 일단 조건이 들어가면 CASE WHEN문을 써놓고 시작한다.

CASE

WHEN   --   THEN

END

------------------------------->

5/1일 이전에는 '출고완료'

NULL인 경우 '출고미정'

나머지는 다 '출고대기' 이므로 저렇게 짜면 쉽게 구현할 수 있다. 

728x90
반응형