새소식

Programmers Coding Test/MySQL

[프로그래머스 131113] MySQL - Level3 조건별로 분류하여 주문상태 출력하기

  • -

 

조건별로 분류하여 주문상태 출력하기

 

https://school.programmers.co.kr/learn/courses/30/lessons/131113

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

1)  문제

다음은 식품공장의 주문정보를 담은 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를 기준으로 오름차순 정렬해주세요.

문제에는 '출고 대기'으로 출력해달라고했지만, 띄어쓰기를 하니 오류로 처리됩니다.
'출고대기'로 붙여야 정답처리됩니다.

 

 

 

Column 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
 

 

 

2)  예시

 

예를 들어 FOOD_ORDER 테이블이 다음과 같다면

 

ORDER_ID PRODUCT_ID AMOUNT PRODUCE_DATE IN_DATE OUT_DATE FACTORY_ID WAREHOUSE_ID
OD00000051 P0002 4000 2022-04-01 2022-04-21 2022-04-21 FT19970003 WH0005
OD00000052 P0003 2500 2022-04-10 2022-04-27 2022-04-27 FT19970003 WH0006
OD00000053 P0005 6200 2022-04-15 2022-04-30 2022-05-01 FT19940003 WH0003
OD00000054 P0006 1000 2022-04-21 2022-04-30 NULL FT19940003 WH0009
OD00000055 P0008 1500 2022-04-25 2022-05-11 2022-05-11 FT19980003 WH0009

 

 

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

 

 

 

ORDER_ID PRODUCT_ID OUT_DATE 출고여부
OD00000051 P0002 2022-04-21 출고완료
OD00000052 P0003 2022-04-27 출고완료
OD00000053 P0005 2022-05-01 출고완료
OD00000054 P0006 출고미정
OD00000055 P0008 2022-05-11 출고대기

 

 

 

 

3)  풀이

 

1. 주문아이디, 상품아이디, 출고일(YYYY-DD-MM)을 조회합니다.

● SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d'),

 

 

 

 

 

2. 출고여부라는 컬럼을 만들고,
    CASE 함수를 이용하여 출고일 조건 따라 출고완료, 출고대기, 출고미정으로 값을 넣어줍니다.

●     CASE WHEN DATE_FORMAT(OUT_DATE,'%m-%d') <= '05-01' THEN '출고완료'

DATE_FORMAT을 이용하여 OUT_DATE를 MM-YY로 출력되게 한다음, 05-01을 포함하여 이전이면 출고완료


         WHEN DATE_FORMAT(OUT_DATE,'%m-%d') > '05-01' THEN '출고대기'

05-01 이후이면 출고대기

 

         ELSE '출고미정'

그 외의 값이면 출고미정으로 표시합니다. (WHEN OUT_DATE IS NULL THEN '출고미정'   <<< 이렇게도 가능)


         END AS '출고여부'
CASE문을 종료하고 출고여부로 컬럼명을 지정합니다.

 

 

 

※ CASE WHEN 조건 THEN 조건에 따른 값

    ELSE 조건에 해당하지 않는 값

    END

조건에 해당하면 THEN 이후 값이 나오고, 조건에 해당하지 않으면 ELSE 이후의 값이 반환됩니다.

그리고 CASE를 종료하기 위해 END로 마무리합니다.

 

 

 

 

3. FOOD_ORDER 테이블에서 값을 가져옵니다.

● FROM FOOD_ORDER

 

 

 

 

4. 주문번호 오름차순으로 정렬합니다.

● ORDER BY ORDER_ID ASC;

 

 

 

 

 

 

 

4)  코드

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

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.