
문제
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() 함수 사용하는 편이 안전
'코딩 테스트 연습 > [프로그래머스][리트코드] MySQL' 카테고리의 다른 글
| [LV.4] GROUP BY > 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 ⭐ (2) | 2025.06.26 |
|---|---|
| [LV.4] String, Date > 취소되지 않은 진료 예약 조회하기 ⭐ (1) | 2025.06.25 |
| [LV.4] String, Date > 특정 옵션이 포함된 자동차 리스트 구하기 (3) | 2025.06.23 |
| [LV.4] String, Date > 조건에 맞는 사용자 정보 조회하기 (1) | 2025.06.20 |
| [LV.4] SUM, MAX, MIN > 최댓값 구하기 (0) | 2025.06.19 |