몸과 마음이 건전한 SW 개발자

[SQL-DATE] 프로그래머스 Lv. 3 조건별로 분류하여 주문상태 출력하기 [다시 풀어 보기] 본문

SQL/다시 풀어 보기

[SQL-DATE] 프로그래머스 Lv. 3 조건별로 분류하여 주문상태 출력하기 [다시 풀어 보기]

스위태니 2024. 12. 27. 13:48

문제 링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

정답 코드

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

풀이 과정

  1. 컬럼 선택 및 변환
    • 목적: ORDER_ID, PRODUCT_ID, OUT_DATE 정보를 가져오고, OUT_DATE는 지정된 형식(YYYY-MM-DD)으로 변환.
    • 수행:
      • SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE
      • DATE_FORMAT 함수는 OUT_DATE를 원하는 날짜 형식으로 출력.
  2. 출고 여부 계산 (CASE 문 사용)
    • 목적: OUT_DATE에 따라 출고 여부를 계산하여 새로운 컬럼(출고여부)을 생성.
    • 수행:
      • CASE 문으로 조건을 설정:
        1. OUT_DATE > '2022-05-01': 출고대기 (미래 날짜)
        2. OUT_DATE <= '2022-05-01': 출고완료 (과거 또는 같은 날짜)
        3. ELSE: 기본값으로 출고미정.
      • 결과는 출고여부 컬럼으로 출력.
  3. 테이블 지정
    • 목적: 데이터를 가져올 테이블을 지정.
    • 수행:
      • FROM FOOD_ORDER를 통해 FOOD_ORDER 테이블에서 데이터를 가져온다.
  4. 정렬
    • 목적: 결과를 ORDER_ID 기준으로 정렬.
    • 수행:
      • ORDER BY ORDER_ID를 사용해 ORDER_ID의 오름차순으로 정렬한다.
  5. 최종 결과
    • 목적: 변환된 데이터와 계산된 값을 출력.
    • 결과 컬럼:
      • ORDER_ID: 주문 ID.
      • PRODUCT_ID: 제품 ID.
      • OUT_DATE: YYYY-MM-DD 형식의 출고 날짜.
      • 출고여부: 출고 상태를 나타냄.

느낀점

  • DATE 부분도 실수하기 쉬운 부분 같다.
  • %Y-%M-%D인지 %Y-%M인지 시간을 필요로 하는지를 유의해서 문제를 풀자.