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