SQL
프로그래머스 SQL(10) - 조건별로 분류하여 주문상태 출력하기
김랑해
2023. 8. 23. 11:28
https://school.programmers.co.kr/learn/courses/30/lessons/131113
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음에는 접근을 어떻게 했냐..
ALTER TABLE로 출고여부라는 열을 하나 만들 수 없으니(연습문제 특성 상)
서브쿼리로 출고여부라는 절을 하나 만들어서
FROM (SELECT ORDER_ID, PRODUCT_ID, TO_CHAR(OUT_DATE,'YYYY-MM-DD'), '출고완료' AS 출고여부
FROM FOOD_ORDER)
위에 CASE절을 이용하여 조건에 맞으면 출고완료, 안 맞으면 출고대기.. 등 파이썬의 np.where을 생각했다
그러나 오라클에선 그게 불가능하다는 것을 파악 (가능하다면 알려주세요;;)
더 쉬운 방법이 있다 바로 OUT_DATE를 CASE WHEN절을 이용해서 변경해주는 것이다
ㅇㅋㄱㄱ
SELECT ORDER_ID, PRODUCT_ID, OUT_DATE,
CASE
WHEN OUT_DATE <= TO_DATE('2022-05-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
THEN '출고완료'
WHEN OUT_DATE IS NULL
THEN '출고미정'
ELSE '출고대기'
FROM FOOD_ORDER
이렇게 했는데 자꾸자꾸자꾸 오류가 뜨는 거다
CHAT GPT한테 물어봤는데도 모른대
이놈 멍청이아냐?
검토..검토..검토.. 한 5번은 읽은듯
그러다가 찾았다
바로 CASE WHEN ~ END!!!!
END까지 써야 비로소 CASE WHEN절이 완성된다는 사실이다
SELECT ORDER_ID, PRODUCT_ID, TO_CHAR(OUT_DATE, 'YYYY-MM-DD') OUT_DATE,
CASE
WHEN OUT_DATE <= TO_DATE('2022-05-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
THEN '출고완료'
WHEN OUT_DATE IS NULL
THEN '출고미정'
ELSE '출고대기'
END AS 출고여부
FROM FOOD_ORDER
ORDER BY ORDER_ID
그래서 이렇게 해주면 끝
<LEARNING POINT>
1. SELECT A, B, C, '아무 값' AS D FROM TBL TBL에 D라는 열이 존재하지 않더라도 '아무 값'으로 채워진 D열이 생성된다
- 숫자로 채우는 것도 가능, 문자로 채우는 것도 가능, 다만 다 같은 값으로만 채울 수 있다
- SQL 1번 문제 참조
2. CASE WHEN ~ END