본문 바로가기
개발일지/코테 정복기

[프로그래머스/SQL] 조건에 부합하는 중고거래 상태 조회하기(Oracle)

by 리콩알 2023. 8. 8.
반응형

문제 설명

다음은 중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS은 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.

 COLUMN NAME  TYPE  NULLABLE 
 BOARD_ID  VARCHAR(5)  FALSE
 WRITER_ID  VARCHAR(50)  FALSE
 TITLE  VARCHAR(100)  FALSE
 CONTENTS  VARCHAR(1000)  FALSE
 PRICE  NUMBER  FALSE
 CREATED_DATE  DATE  FALSE
 STATUS  VARCHAR(10)  FALSE
 VIEWS  NUMBER  FALSE

 

문제

USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.

 

예시

USED_GOODS_BOARD 테이블이 다음과 같을 때

 BOARD_ID  WRITER_ID  TITLE  CONTENTS  PRICE  CREATED_DATE  STATUS   VIEWS
 B0007  s2s2123 커피글라인더 새상품처럼 깨끗합니다.  7000  2022-10-04  DONE  210
 B0008  hong02 자전거 판매합니다 출퇴근용으로 구매했다가 사용하지 않아서 내놔요  40000  2022-10-04  SALE  301
 B0009  yawoong67 선반 팝니다 6단 선반. 환불 반품 안됩니다.  12000  2022-10-05  DONE  202
 B0010  keel1990 철제선반5단 철제선반 5단 조립식 팜  10000  2022-10-05  SALE  194

SQL을 실행하면 다음과 같이 출력되어야 합니다.

 BOARD_ID  WRITER_ID  TITLE  PRICE  STATUS
 B0010  keel1990  철제선반5단  10000  판매중
 B0009  yawoong67  선반 팝니다  12000  판매완료

 

 

풀이

1. USED_GOODS_BOARD 테이블에서

2. 2022년 10월 5일에 등록

3. 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요.

4. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고,

5. 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.

SELECT BOARD_ID
     , WRITER_ID
     , TITLE
     , PRICE
     , CASE WHEN STATUS = 'SALE' THEN '판매중'
            WHEN STATUS = 'RESERVED' THEN '예약중'
            WHEN STATUS = 'DONE' THEN '거래완료'
       ELSE ''
       END AS STATUS
   FROM USED_GOODS_BOARD
  WHERE 1 = 1 
    AND TO_CHAR(CREATED_DATE,'YYYYMMDD') = '20221005'
  ORDER BY BOARD_ID DESC;

 

코드풀이

SELECT -- 3.게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회
       BOARD_ID -- 게시글 ID
     , WRITER_ID -- 작성자 ID
     , TITLE -- 게시글 제목
     , PRICE -- 가격
     , CASE WHEN STATUS = 'SALE' THEN '판매중'
            WHEN STATUS = 'RESERVED' THEN '예약중'
            WHEN STATUS = 'DONE' THEN '거래완료'
       ELSE ''
       END AS STATUS -- 거래상태
       -- 4.거래상태를 CASE문을 통해 분류
   FROM USED_GOODS_BOARD -- 1.USED_GOODS_BOARD 테이블에서
  WHERE 1 = 1 
    AND TO_CHAR(CREATED_DATE,'YYYYMMDD') = '20221005' -- 2.2022년 10월 5일에 등록된
    /* CREATED_DATE컬럼이 DATE타입으로 되어있기 때문에 비교를 위해 TO_CHAR를 이용
       String형태로 변경하여 조건에 맞게 비교해준다. */
  ORDER BY BOARD_ID DESC;
   -- 5.게시글 ID를 기준으로 내림차순 정렬

 

 

문제출처

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

 

프로그래머스

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

programmers.co.kr

 

도움이 되셨다면 공감 버튼과 댓글 남겨주세요오♥

반응형