본문 바로가기
Language/DB

[Programmers | SQL | String, Date 문제 풀이] 조건별로 분류하여 주문상태 출력하기 - Solution with CASE WHEN & TO_CHAR() 또는 DATE_FORMAT()

by ㅇ달빛천사ㅇ 2024. 7. 3.
728x90

KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | SQL CODEKATA

 

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

🏷 관련 주제 : DATE CASE WHEN




✔️ (Oracle) Solution with TO_CHAR() & CASE WHEN

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 '출고대기'
              ELSE '출고미정' END "출고여부"
FROM FOOD_ORDER
ORDER BY ORDER_ID;
실행 결과


✔️ (MySQL) Solution with DATE_FORMAT() & CASE WHEN

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


💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍

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


1. FOOD_ORDER테이블에서 주문 ID, 제품 ID, 출고일자를 조회하자.

출고일자는 '년-월-일' 형식으로 출력하고 OUT_DATE라고 별칭을 주자.

날짜 형식 변경
Oracle : TO_CHAR(칼럼, 'yyyy-mm-dd')
MySQL : DATE_FORMAT(칼럼, '%Y-%m-%d')

    • Oracle
      SELECT ORDER_ID
             , PRODUCT_ID
             , TO_CHAR(OUT_DATE, 'yyyy-mm-dd') OUT_DATE
      FROM FOOD_ORDER;
      실행 결과

  • MySQL
    SELECT ORDER_ID
           , PRODUCT_ID
           , DATE_FORMAT(OUT_DATE, '%Y-%m-%d') OUT_DATE
    FROM FOOD_ORDER;
    실행 결과

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

출고일자에 따른 Segmentation의 별칭을 "출고여부"로 주자.
출고 일자가
- 5월 1일(포함) 이전 : '출고완료'
- 5월 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 '출고대기'
                    ELSE '출고미정' END "출고여부"
      FROM FOOD_ORDER;
      실행 결과

  • MySQL
    SELECT ORDER_ID
           , PRODUCT_ID
           , DATE_FORMAT(OUT_DATE, '%Y-%m-%d') OUT_DATE
           , CASE WHEN DATE_FORMAT(OUT_DATE, '%Y-%m-%d') <= '2022-05-01' THEN '출고완료'
                  WHEN DATE_FORMAT(OUT_DATE, '%Y-%m-%d') > '2022-05-01' THEN '출고대기'
                  ELSE '출고미정' END "출고여부"
    FROM FOOD_ORDER;
    실행 결과

3. 주문 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 TO_CHAR(OUT_DATE, 'yyyy-mm-dd') > '2022-05-01' THEN '출고대기'
                    ELSE '출고미정' END "출고여부"
      FROM FOOD_ORDER
      ORDER BY ORDER_ID;
      실행 결과

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

💬 무엇을 새롭게 알았는지

  • 날짜 형식 변경
    • Oracle : TO_CHAR()
    • MySQL : DATE_FORMAT()
  • CASE WHEN 구문을 사용해 Segmentation 보았다.






728x90


Top