코딩 테스트 연습/[프로그래머스][리트코드] MySQL

[LV.4] String, Date > 조건에 부합하는 중고거래 상태 조회하기

duswjd_data 2025. 6. 24. 11:07

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

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

최종 정답 코드

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(CREATED_DATE) = '2022-10-05'
ORDER BY BOARD_ID DESC

 


첫 번째 시도(실패. 오류)

SELECT BOARD_ID,
       WRITER_ID,
       TITLE,
       PRICE,
       (CASE WHEN STATUS = 'SALE' THEN '판매중'
             WHEN STATUS = 'RESERVED' THEN '예약중'
             WHEN STATUS = 'DONE' THEN '거래완료') STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC

오류난 이유

  • CASE WHEN - THEN - END (END로 마무리하는거 잊지 말자!!!!!!)

두 번째 시도(성공. 개선 필요)

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

개선점

  • CASE 표현식 괄호 제거 (권장)
    • SQL에서는 CASE ... END AS 컬럼명이 더 일반적이고 가독성 좋음
  •  날짜 필터가 DATETIME일 경우 대비
    • CREATED_DATE가 DATETIME 타입이라면 '2022-10-05'는 시간이 00:00:00인 경우만 일치
    • 그래서 전체 하루를 포함하려면 DATE() 함수 사용하는 편이 안전