관리 메뉴

물 만날 물고기

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

DB & SQL/프로그래머스

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

Lung Fish 2023. 6. 22. 22:24

🔍 예상 검색어

더보기

# 프로그래머스

# SQL

# 조건에 부합하는 중고거래 상태 조회하기


해당 포스팅은 프로그래머스 SQL "조건에 부합하는 중고거래 상태 조회하기"  문제에 대하여 정리하였습니다.

 

▶ 문제

코딩테스트 연습 - 조건에 부합하는 중고거래 상태 조회하기 | 프로그래머스 스쿨

 

프로그래머스

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

programmers.co.kr

 

 

▶ 정답(1) : ELSE 사용 안함

-- 코드를 입력하세요

/* 
FROM USED_GOODS_BOARD AS B
B.BOARD_ID, 
B.WRITER_ID, 
B.TITLE, 
B.CONTENTS, 
B.PRICE, 
B.CREATED_DATE, 
B.STATUS, 
B.VIEWS
*/

/* RESULT
B.BOARD_ID, B.WRITER_ID, B.TITLE, B.PRICE, B.STATUS
*/

/*
(1) 2022년 10월 5일에 등록된 중고거래 - 완료✔️
(2) 조건문 - 완료✔️
B.STATUS = SALE => 판매중
B.STATUS = RESERVED => 예약중
B.STATUS = DONE => 거래완료
(3) 내림차순 정렬 : B.BOARD_ID - 완료✔️
*/

SELECT B.BOARD_ID, B.WRITER_ID, B.TITLE, B.PRICE, 
    CASE B.STATUS
        WHEN 'SALE' THEN '판매중'
        WHEN 'RESERVED' THEN '예약중'
        WHEN 'DONE' THEN '거래완료'
    END AS STATUS
FROM USED_GOODS_BOARD AS B
WHERE DATE_FORMAT(B.CREATED_DATE, "%Y-%m-%d") = "2022-10-05" 
ORDER BY B.BOARD_ID DESC;

 

▶ 정답(2)  : ELSE 사용

SELECT B.BOARD_ID, B.WRITER_ID, B.TITLE, B.PRICE, 
    CASE B.STATUS
        WHEN 'SALE' THEN '판매중'
        WHEN 'RESERVED' THEN '예약중'
        ELSE '거래완료'
    END AS STATUS
FROM USED_GOODS_BOARD AS B
WHERE DATE_FORMAT(B.CREATED_DATE, "%Y-%m-%d") = "2022-10-05" 
ORDER BY B.BOARD_ID DESC;

▶ 정답(3) : WHERE절 DATE_FORMAT 사용 안함

SELECT B.BOARD_ID, B.WRITER_ID, B.TITLE, B.PRICE, 
    CASE B.STATUS
        WHEN 'SALE' THEN '판매중'
        WHEN 'RESERVED' THEN '예약중'
        ELSE '거래완료'
    END AS STATUS
FROM USED_GOODS_BOARD AS B
WHERE CREATED_DATE = '2022-10-05'
ORDER BY B.BOARD_ID DESC;

 

총평

이번 문제는 단일 테이블로만 이루어진 문제로 DATE_FORMAT 처리와 CASE 함수 사용이 중요하였다. 그리고 DATE_FORMAT 함수에서 "%Y" 대문자와 "%y" 소문자의 차이를 확인해보았다. 대문자는 년도 4자리 출력, 소문자는 2자리로 출력된다.

 

DATE_FORMAT(CREATED_DATE, "%Y-%m-%d")
DATE_FORMAT(CREATED_DATE, "%y-%m-%d")

 

 

SQL 코딩 테스트를 염두해두고 학습을 진행하는 것이기 때문에 문제에 대한 이해도 중요하고 실수하지 않는 것도 중요하다고 생각된다. 그래서 문제를 풀기전에 각 테이블별 컬럼들과 결과 테이블로 출력될 컬럼들을 주석으로 먼저 정리하고, 문제에서 조건이 되는 부분들을 미리 정리해두고 시작하였다. 

 

 

 

 


 

▼ 참고자료

No. 내용 비고
1 조건에 부합하는 중고거래 상태 조회하기 qqo222.log
2 [SQL] 조건에 부합하는 중고거래 상태 조회하기(프로그래머스/MySQL/Level 2) BigData + Data Analyst + Daily

 

▼ 복습/히스토리

더보기
No. 복습일 비고
1 2023년 06월 24일 - 09시 17분 문제에서 제시된 조건 코드 작성하면서 체크하는 습관이 필요함
2 2023년 06월 24일 - 10시 04분 CASE WHEN 절 STATUS 각각 입력
3    
4    
5    

- 작성코드

-- 코드를 입력하세요
-- USED_GOODS_BOARD 
-- BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS

/* 문제 조건
문제 조건이 적용되었는지 체크하면서 진행

(1) USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID
(2) 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류
(3) 결과는 게시글 ID를 기준으로 내림차순 정렬
*/

/* 결과테이블
BOARD_ID, WRITER_ID, TITLE, PRICE, STATUS(+NEW)
*/


SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
CASE STATUS -- (2)
WHEN "SALE" THEN "판매중" 
WHEN "DONE" THEN "거래완료"  
WHEN "RESERVED" THEN "예약중"
ELSE NULL
END AS STATUS
FROM USED_GOODS_BOARD
WHERE DATE_FORMAT(CREATED_DATE, "%Y-%m-%d") = "2022-10-05"  -- (1)
ORDER BY BOARD_ID DESC -- (3)

 

- 작성코드(2)

SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
CASE  -- (2)
WHEN STATUS = "SALE" THEN "판매중" 
WHEN STATUS = "DONE" THEN "거래완료"  
WHEN STATUS = "RESERVED" THEN "예약중"
ELSE NULL
END AS STATUS
FROM USED_GOODS_BOARD
WHERE DATE_FORMAT(CREATED_DATE, "%Y-%m-%d") = "2022-10-05"  -- (1)
ORDER BY BOARD_ID DESC -- (3)