조건에 부합하는 중고거래 상태 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/164672
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1) 문제
USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS은 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.
거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 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 |
2) 예시
예를 들어 USER_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 | 거래완료 |
3) 풀이
1. 테이블에서 게시글ID, 작성자ID, 제목, 가격, 상태를 조회합니다.
● SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, STATUS FROM USER_GOOD_BOARD
2. CASE WHEN을 이용하여 STATUS(상태가) SALE, RESERVED, DONE임에 따라 다른 값으로 출력되게 합니다.
● CASE
WHEN STATUS = 'SALE' THEN '판매중'
WHEN STATUS = 'RESERVED' THEN '예약중'
WHEN STATUS = 'DONE' THEN '거래완료'
END AS STATUS
※ CASE WHEN 조건 1 THEN 값1
WHEN 조건2 THEN 값2
WHEN 조건3 THEN 값3
...(조건이 더있다면 추가)
ELSE 값4
END
조건1이 참이면 값1, 조건이 2가 참이면 값2, 조건3이 참이면 값3,
모든 조건이 만족하지 못한다면 값4가 출력되게 됩니다.
3. 그리고 2022-10-05에 작성한 게시글만 조회합니다.
● WHERE DATE_FORMAT(CREATED_DATE, '%Y-%m-%d') = '2022-10-05'
게시글 생성일을 YYYY-MM-DD 형식으로 변형하고, 2022년 10월 5일에 해당하는 글을 조건으로 합니다.
※ DATE_FORMAT
MySQL에서 날짜를 원하는 형식으로 포맷팅하는 데 사용되는 함수
형식 | 설명 | 예시 |
%Y | 네 자리 연도 | 2023 |
%y | 두 자리 연도 | 23 |
%M | 월 이름의 전체 문자열 | January |
%m | 두 자리 월 | 01 ~ 12 |
%d | 두 자리 일 | 01 ~ 31 |
%H | 두 자리 24시간 형식 시 | 00 ~ 23 |
%h | 두 자리 12시간 형식 시 | 01 ~ 12 |
%i | 두 자리 분 | 00 ~ 59 |
%s | 두 자리 초 | 00 ~ 59 |
%p | AM 또는 PM | AM 또는 PM |
4. 게시글 ID 내림차순으로 정렬합니다.
● ORDER BY BOARD_ID DESC;
4) 코드
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
CASE
WHEN STATUS = 'SALE' THEN '판매중'
WHEN STATUS = 'RESERVED' THEN '예약중'
WHEN STATUS = 'DONE' THEN '거래완료'
END AS STATUS
FROM USED_GOODS_BOARD
WHERE DATE_FORMAT(CREATED_DATE, '%Y-%m-%d') = '2022-10-05'
ORDER BY BOARD_ID DESC;
'Programmers Coding Test > MySQL' 카테고리의 다른 글
[프로그래머스 59044] MySQL - Level3 오랜 기간 보호한 동물(1) (0) | 2023.09.01 |
---|---|
[프로그래머스 157342] MySQL - Level2 자동차 평균 대여 기간 구하기 (0) | 2023.08.31 |
[프로그래머스 131536] MySQL - Level2 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.08.31 |
[프로그래머스 131120] MySQL - Level2 3월에 태어난 여성 회원 목록 출력하기 (1) | 2023.08.31 |
[프로그래머스 131530] MySQL - Level2 가격대 별 상품 개수 구하기 (0) | 2023.08.30 |