코딩테스트/SQL 코딩테스트

<프로그래머스> 조건별로 분류하여 주문상태 출력하기

배또가또 2023. 12. 20. 16:40

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

 

프로그래머스

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

programmers.co.kr



  • 문제 요구사항
    • 주문ID, 제품ID, 출고일자, 출고여부를 조회
    • 출고 여부는 5월 1일을 기준으로 출고일자가 5월 1일까지는 출고완료, 이후의 날짜는 출고대기 미정이면 출고미정으로 출력
    • 결과는 주문ID를 기준으로 오름차순 정렬

 

CASE WHEN ~ THEN 구문을 이용해 2022년 5월 1일과 비교하여 출고여부를 출력함

출고일자가 미정이라는 뜻은 값이 빈 값 즉 NULL값이라는 것이므로 IS NULL 로 비교함


1) 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 TO_CHAR(OUT_DATE,'YYYY-MM-DD') > '2022-05-01' THEN '출고대기'
           WHEN OUT_DATE IS NULL THEN '출고미정'
           END AS 출고여부
FROM FOOD_ORDER 
ORDER BY ORDER_ID;

 

Oracle에서는 날짜 형식의 데이터와 비교를 위해 String 형태의 데이터로 바꿔줄 필요가 있음 따라서 

TO_CHAR를 이용함


2) MySQL

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

 

MySQL에서는 암묵적인 형변환이 가능하기 때문에 따로 변형을 해줄 필요 없이 바로 텍스트 데이터와 DATETIME형식 데이터가 비교가 가능함