꾸물꾸물 졔의 개발공부

[MySQL] 프로그래머스 - 조건별로 분류하여 주문상태 출력하기 (String, Date, CASE문) 본문

알고리즘/SQL

[MySQL] 프로그래머스 - 조건별로 분류하여 주문상태 출력하기 (String, Date, CASE문)

체제 2023. 4. 11. 10:41
 

프로그래머스

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

programmers.co.kr

출처 - 프로그래머스


문제 

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


 

풀이 

  • 출고일자 조회 (OUT_DATE)

: 조회할 컬럼중에 출고일자(OUT_DATE) 는 DATE 형식이기 때문에 시간(0000-00-00 00:00:00) 까지 다 출력된다.

필요한 날짜만 추출하기 위해 DATE_FORMAT() 을 사용하여 OUT_DATE의 형식을 지정

🔵DATE_FORMAT(날짜, 형식) : 날짜를 지정한 형식으로 출력 

DATE_FORMAT(OUT_DATE, '%Y-%m-%d) AS OUT_DATE

OUT_DATE의 형식을 날짜만 출력하도록 변경 후, OUT_DATE라는 명칭으로 저장해주었다. 이후 출고여부를 결정할 때
(변경한) OUT_DATE 그대로 사용하면 됨 . 

 

 

  • 2022-05-01 기준으로 출고 되었으면 '출고완료', 그렇지 않으면 '출고대기', 출고날짜가 없는 경우 '출고미정' 으로 출력, 컬럼명은 "출고여부" 

: OUT_DATE가 '2022-05-01' 이하 '출고완료', 초과 '출고대기' , NULL값 '출고미정' > 컬럼명은 '출고여부' 로 지정하여 출력 

DATEDIFF 함수를 사용해서 OUT_DATE와 '2022-05-01' 의 차이를 알아낼 수 있다. 

🔵DATEDIFF(OUT_DATE, '2022-05-01') : 출고날짜와 5월 1일의 날짜 차이를 int 형으로 반환 

IF 0보다 작거나 같다면 → 출고 완료 

IF 0보다 크다면 출고 대기 

ELSE 둘다 아니라면 출고 미정

즉, 조건에 따라 컬럼을 생성하여 출력하기 위해 CASE-WHEN-THEN 절 사용

(CASE WHEN DATEDIFF(OUT_DATE, '2022-05-01') <=0 THEN '출고완료' 
WHEN DATEDIFF(OUT_DATE, '2022-05-01') > 0 THEN '출고대기' 
ELSE '출고미정' END) AS 출고여부

 

✔️코드

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