https://school.programmers.co.kr/learn/courses/30/lessons/164672
USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.
특정 조건에 따라 분류, 변환하여 출력하기 위해 CASE WHEN를 사용한다.
CASE WHEN 구문은 SQL에서 조건부로 값을 반환하는데 사용되는 구문으로 다양한 조건을 지정하고 해당 조건에 따라 다른 값을 반환할 수 있다.
아래와 같은 테이블에서
BOARD_ID | WRITER_ID | TITLE | CONTENTS | PRICE | CREATED_DATE | STATUS | VIEWS |
---|---|---|---|---|---|---|---|
B0001 | kwag98 | 반려견 배변패드 팝니다 정말 저렴히 판매합니다. 전부 미개봉 새상품입니다. | 12000 | 2022-10-01 00:00:00 | DONE | 250 | |
B0002 | lee871201 | 국내산 볶음참깨 직접 농사지은 참깨입니다. | 3000 | 2022-10-02 00:00:00 | DONE | 141 | |
B0003 | goung12 | 배드민턴 라켓 사놓고 방치만 해서 팝니다. | 9000 | 2022-10-02 00:00:00 | SALE | 212 | |
B0004 | keel1990 | 디올 귀걸이 신세계강남점에서 구입. 정품 아닐시 백퍼센트 환불 | 130000 | 2022-10-02 00:00:00 | SALE | 199 | |
B0005 | haphli01 | 스팸클래식 팔아요 유통기한 2025년까지에요 | 10000 | 2022-10-02 00:00:00 | SALE | 122 |
아래와 같은 쿼리를 작성해서 원하는 결과를 얻을수 있다
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
case
when STATUS = 'DONE' THEN '거래완료'
when STATUS = 'SALE' THEN '판매중'
when STATUS = 'RESERVED' THEN '예약중'
END AS 상태
FROM USED_GOODS_BOARD
WHERE CREATED_DATE LIKE '2022-10-05'
order by BOARD_ID desc
위의 예시에서 [STATUS = 'DONE']은 조건 검색을 원하는 열의 이름이고, USED_GOODS_BOARD은 데이터를 가져올 테이블의 이름이다. CASE WHEN 구문은 상태라는 새로운 열을 생성하여 조건에 따라 다른 값을 반환한다.
CASE WHEN 구문은 다음과 같이 작성됩니다:
WHEN STATUS = 'DONE' THEN '거래완료' : [STATUS = 'DONE']가 참일 경우 '거래완료' 를 반환합니다.
ELSE '해당없음'을 조건 마지막에 붙여 위의 조건에 해당하지 않을 경우 '해당없음'을 반환하는것도 가능하다