Study/SQL

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

delay100 2024. 1. 16. 09:48
728x90
반응형
SMALL

코딩테스트 연습 > String, Date > 조건별로 분류하여 주문상태 출력하기

난이도: Lv.3 

언어: MySQL

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

 

프로그래머스

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

programmers.co.kr

 

실패

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

실패이유1. 문자열로 날짜를 비교했음.

DATEDIFF로 날짜의 차이를 구해서 비교해야합니다.

실패이유2. CASE WHEN 절을 잘 못 사용함.

CASE WHEN 절은 

CASE WHEN ~

THEN ~

(ELSE ~)

END AS ~

로 이루어지는데, CASE 와 WHEN 사이에 변수명을 넣어서 MySQL 문법에 어긋나고 있습니다.

 

성공

성공1. *채택

SELECT 
    a.ORDER_ID
    , a.PRODUCT_ID
    , DATE_FORMAT(a.OUT_DATE, '%Y-%m-%d') AS OUT_DATE
    , 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 a
ORDER BY ORDER_ID

날짜를 비교하는데는 DATEDIFF와 TIMESTAMPDIFF가 있는데, 여기서는 날짜만 비교할 것이기 때문에 DATEDIFF를 채용했습니다.

 

성공2.

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

성공1에서 DATEDIFF만 TIMSTAMPDIFF로 변경해보았습니다.

 

 

*참고 chatGPT

없습니다.


코드에 질문이 있으시면 댓글을 달아주세요. 최대한 빠른 시일 내에 답변해드리겠습니다. 

봐주셔서 감사합니다.

728x90
반응형
LIST