꾸물꾸물 졔의 개발공부
[MySQL] 프로그래머스 - 조건별로 분류하여 주문상태 출력하기 (String, Date, CASE문) 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문ID를 기준으로 오름차순 정렬해주세요.
풀이
- 출고일자 조회 (OUT_DATE)
: 조회할 컬럼중에 출고일자(OUT_DATE) 는 DATE 형식이기 때문에 시간(0000-00-00 00:00:00) 까지 다 출력된다.
필요한 날짜만 추출하기 위해 DATE_FORMAT() 을 사용하여 OUT_DATE의 형식을 지정
🔵DATE_FORMAT(날짜, 형식) : 날짜를 지정한 형식으로 출력
DATE_FORMAT(OUT_DATE, '%Y-%m-%d) AS OUT_DATE
OUT_DATE의 형식을 날짜만 출력하도록 변경 후, OUT_DATE라는 명칭으로 저장해주었다. 이후 출고여부를 결정할 때
(변경한) OUT_DATE 그대로 사용하면 됨 .
- 2022-05-01 기준으로 출고 되었으면 '출고완료', 그렇지 않으면 '출고대기', 출고날짜가 없는 경우 '출고미정' 으로 출력, 컬럼명은 "출고여부"
: OUT_DATE가 '2022-05-01' 이하 '출고완료', 초과 '출고대기' , NULL값 '출고미정' > 컬럼명은 '출고여부' 로 지정하여 출력
DATEDIFF 함수를 사용해서 OUT_DATE와 '2022-05-01' 의 차이를 알아낼 수 있다.
🔵DATEDIFF(OUT_DATE, '2022-05-01') : 출고날짜와 5월 1일의 날짜 차이를 int 형으로 반환
IF 0보다 작거나 같다면 → 출고 완료
IF 0보다 크다면 → 출고 대기
ELSE 둘다 아니라면 → 출고 미정
즉, 조건에 따라 컬럼을 생성하여 출력하기 위해 CASE-WHEN-THEN 절 사용
(CASE WHEN DATEDIFF(OUT_DATE, '2022-05-01') <=0 THEN '출고완료'
WHEN DATEDIFF(OUT_DATE, '2022-05-01') > 0 THEN '출고대기'
ELSE '출고미정' END) AS 출고여부
✔️코드
SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS DATE_FORMAT,
(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
ORDER BY ORDER_ID;
'알고리즘 > SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 - 오랜 기간 보호한 동물(2) (String, Date, Limit) (0) | 2023.04.13 |
---|---|
[MySQL] 프로그래머스 - 헤비 유저가 소유한 장소 (SubQuery) (0) | 2023.04.12 |
[MySQL] 프로그래머스 - 중성화 여부 파악하기 (String, CASE절) (0) | 2023.04.03 |
[MySQL] 프로그래머스 - 가격이 제일 비싼 식품의 정보 출력하기 (MAX) (0) | 2023.04.01 |
[MySQL] 프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력하기 (GROUP BY) (0) | 2023.04.01 |