SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_조건별로 분류하여 주문상태 출력하기

SQL공부 2024. 2. 22. 17:03
반응형

SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE,'%Y-%m-%d'),
    CASE WHEN DATE_FORMAT(OUT_DATE,'%m-%d') <= '05-01' then '출고완료'
    WHEN DATE_FORMAT(OUT_DATE,'%m-%d') > '05-01' then '출고대기'
    else '출고미정'
    end as 출고여부
FROM FOOD_ORDER
WHERE 1=1
ORDER BY 1
---2022년 밖에 데이터가 없어서 아래와 같이 해도 무방
SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE,'%Y-%m-%d'),
    CASE WHEN OUT_DATE <= '2022-05-01' then '출고완료'
    WHEN OUT_DATE > '2022-05-01' then '출고대기'
    WHEN OUT_DATE IS NULL THEN '출고미정'
    end as 출고여부
FROM FOOD_ORDER
WHERE 1=1
ORDER BY 1

ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE,OUT_DATE,FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문양, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미

 

문제

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

 

굉장히 당황 스러웠던 문제였다. 분명 데이터가 22년도 밖에 없어서 아래와 같이 코드를 짜서 풀었는데 신텍스 에러가 떳다. 내가 문법을 잘못했나? 하면서 다 찾아봤는데 <= 이렇게써야하는데 =< 이렇게 쓴것이다.. 분명 예전에 MSSQL에서 할땐 상관없이 된거 같았는데 원래안되는건가? 코드는 맞는것 같은데 안되어서 뇌정지가 왔다가.. 풀렸다..

 

푸는 방법은 이렇다. 5월 1일 까지 출고완료라서 5월 1일을 포함한 과거데이터는 출고완료 그 이후는 출고대기 그리고 값이없는 NULL은 출고 미정으로 입력하게 하면된다. 이러한 조건문일 경우에는 항상 CASE WHEN으로 처리하면 편하다. 좀더 요구하는 정답에 맞게 쓰기위해 IS NULL 구문도 함께 사용했다. 그리고 요구한 날짜포맷도 맞추고 정렬을 하여 완성하였다.

 

위쪽의 답은 약간 임시방편으로 맞추어버린 정답 같은 느낌이긴하나 동일하니 참고하면 된다.

반응형