문제 풀이/SQL

[SQL/mysql] [programmers] 조건별로 분류하여 주문상태 출력하기

일 월 2023. 2. 26. 17:29

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

식품공장의 주문정보를 담은 FOOD_ORDER 테이블 

Column   Type Nullable
ORDER_ID 주문 ID VARCHAR(10) FALSE
PRODUCT_ID 제품 ID VARCHAR(5) FALSE
AMOUNT 주문양 NUMBER FALSE
PRODUCE_DATE 생산일자 DATE TRUE
IN_DATE 입고일자 DATE TRUE
OUT_DATE 출고일자 DATE TRUE
FACTORY_ID 공장 ID VARCHAR(10) FALSE
WAREHOUSE_ID 창고 ID VARCHAR(10) FALSE

문제

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

결과

ORDER_ID PRODUCT_ID OUT_DATE 출고여부
OD00000051 P0002 2022-04-21 출고완료
OD00000052 P0003 2022-04-27 출고완료
OD00000053 P0005 2022-05-01 출고완료
OD00000054 P0006   출고미정
OD00000055 P0008 2022-05-11 출고대기

 


고려할 점

1. FOOD_ORDER 테이블에 없는 출고 여부 컬럼 생성
2. FOOD_ORDER 테이블의 OUT_DATE 컬럼 값에 따른 출고 여부 컬럼 값 설정
(출고일자가 2022년 5월 1일을 넘지 않으면 출고완료, 그 이후라면 출고대기, 출고일자가 null 값이면 출고미정)
3. 날짜 형식 변경 (FOOD_ORDER 테이블에서 날짜 형식에는 시간까지 포함되어 있음)
4. 날짜 비교, null 값 여부 확인

(+ 정렬)

 

풀이법

1. OUT_DATE 상태에 따라 select문으로 조회한 결과를 합쳐서 보여주기

(SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE,
 '출고완료' AS 출고여부 FROM FOOD_ORDER WHERE OUT_DATE <= '2022-05-01')
 UNION
(SELECT ORDER_ID, PRODUCT_ID,  DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE,
 '출고대기' AS 출고여부 FROM FOOD_ORDER WHERE OUT_DATE > '2022-05-01')
 UNION
 (SELECT ORDER_ID, PRODUCT_ID, OUT_DATE,
 '출고미정' AS 출고여부 FROM FOOD_ORDER WHERE OUT_DATE IS NULL)
ORDER BY ORDER_ID;

 

2. 조건문을 사용해 출고여부를 출력해주기

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

 


참고

https://velog.io/@kyukim/20210909

 

[TIL 2021.09.09] 데이터베이스

SQL - UNION에 대해서 배움.MySQL에서 SELECT 시에 임의로 컬럼 추가하는 법을 배움.UNION은 UNION과 UNION ALL 명령어를 사용 할 수 있음.UNION은 뒤에 DISTINCT를 생략한 것이라고 보면 된다.그러므로 둘의 차이

velog.io

https://heyellie.tistory.com/32

 

SQL 쿼리 결과에 열 추가

SQL 쿼리 결과에 열 추가 시간: 2019-05-21 20:15:27.0태그:sql sql-server ssrs-2008 번역: 출처번역 교정 나는 SSRS에 보고서를 작성 중입니다. 데이터 세트는 MS SQL 서버의 SQL 쿼리로 채워집니다. 그것은 Union

heyellie.tistory.com

https://marobiana.tistory.com/6

 

[MYSQL] 가져온 값을 조건에 따라 값 바꾸기(case - when - end 문)

집계 쿼리 만들 때 쓰이는 것... Group by 를 써서 데이터를 가져왔는데그 데이터는 숫자 코드로 되어있다(1 :사과 , 2: 포도) 숫자 코드는 보기 안좋으니까 글자로 바꾸려는데, 쿼리에서 조건문을 쓰

marobiana.tistory.com

https://redcow77.tistory.com/260

 

[Mysql] Mysql 조건문 - IF 문, CASE 문

Mysql의 IF ~ Else 조건문 (Mysql의 IF 문은 엑셀에서의 IF 함수와 동일합니다.) if ( 조건문, 참일때 값, 거짓일때 값) SELECT IF(required, '필수' '선택') AS '필수여부' FROM TABLE SELECT A.seq, IF(A.seq

redcow77.tistory.com

https://bramhyun.tistory.com/28

 

[MYSQL] DATE_FORMAT 함수 - 날짜 포맷/ 형식 지정하기

DATE_FORMAT 함수 SQL을 작성하다 보면, 시간과 날짜에 관련된 COLUMN들을 활용하는 경우가 종종 있습니다. 이번 글에서는 DATETIME 에 관련된 포맷과 DATE_FORMAT 함수에 관련하여 정리 해 보겠습니다. 이

bramhyun.tistory.com

https://devpouch.tistory.com/162?category=1019761 

 

[SQL] NULL 값 검색하는 방법 (IS NULL, IS NOT NULL)

mysql에서 비교연산자를 통해서 데이터를 가져올 때는 WHERE절에 = 연산자를 써서 데이터를 가져올 수 있다. 하지만 NULL 값인 경우 아래와 같은 방법으로는 검색이 되지 않는다. NULL은 데이터가 아

devpouch.tistory.com