문제 설명
다음은 식품공장의 주문정보를 담은 FOOD_ORDER 테이블입니다. FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE, OUT_DATE, FACTORY_ID, WAREHOUSE_ID 는 각각 주문 ID, 제품 ID, 주문양, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.
Coulmn name | Type | Nullable |
ORDER_ID | VARCHAR(10) | FALSE |
PRODUCT_ID | VARCHAR(5) | FALSE |
AMOUNT | NUMBER | FALSE |
PRODUCE_DATE | DATE | TRUE |
IN_DATE | DATE | TRUE |
OUT_DATE | DATE | TRUE |
FACTORY_ID | VARCHAR(10) | FALSE |
WAREHOUSE_ID | VARCHAR(10) | FALSE |
문제
FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.
정답 코드
-- 조건별로 분류하여 주문상태 출력하기
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 '출고대기'
ELSE '출고미정'
END AS 출고여부
FROM FOOD_ORDER
ORDER BY 1;
코드 해석
FOOD_ORDER 테이블에서 주문 ID, 제품 ID, 출고일자, 출고여부를 조회한다.
이때, 출고일자의 DATE_FORMAT은 ‘2022-03-16’과 같이 ‘%Y-%m-%d’의 형식으로 출력하게 하고, 출고여부는 CASE WHEN 구문을 써서 출고일자가 ‘2022-05-01’ 까지 ‘출고완료’로 이후 날짜는 ‘출고대기’로 나머지 경우는 ‘출고미정’으로 나오게 하고 컬럼명은 ‘출고여부’로 지정한다.
결과는 주문 ID를 기준으로 오름차순 정렬하는 코드이다.
결과
느낀 점/어려운 점/개선점
SELECT 절에 CASE WHEN을 써야 하는 문제는 처음이라서 순간 당황하긴 했는데, CASE WHEN은 많이 사용해 본 구문이라서 쉽게 풀 수 있었다.
'SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 Lv 3. 조건에 맞는 사용자와 총 거래금액 조회하기 정답풀이 (0) | 2023.08.12 |
---|---|
[BigQuery] 웹사이트에서의 행동을 파악하는 데이터 추출하기 (0) | 2022.05.20 |
[BigQuery] 다면적인 축을 사용해 데이터 집약하기 (0) | 2022.05.06 |
[BigQuery] 시계열 기반으로 데이터 집계하기 (0) | 2022.05.06 |
[Oracle] WHERE 절을 이용한 조건 검색 (0) | 2022.04.18 |
댓글