Lv3. 자동차 대여 기록에서 대여중/대여 가능 여부 구분하기 (MySQL)
링크: https://school.programmers.co.kr/learn/courses/30/lessons/157340?language=mysql
내가 작성한 코드
SELECT CAR_ID,
MAX(CASE WHEN START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16' THEN '대여중' ELSE '대여 가능' END) AS ABAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
-- 한 자동차(CAR_ID)당 여러 개의 대여 기록이 존재함
-- GROUP BY로 자동차별로 묶으면 '대여중'과 '대여 가능' 기록이 섞일 수 있음
-- 문자열 순서 상 '대여중'이 '대여 가능'보다 크므로 MAX를 사용해 하나라도 '대여중'이 있으면 '대여중'이 출력되도록 우선순위를 결정
Oracle
SELECT CAR_ID,
MAX(CASE WHEN START_DATE <= TO_DATE('2022-10-16', 'YYYY-MM-DD') AND END_DATE >= TO_DATE('2022-10-16', 'YYYY-MM-DD') THEN '대여중' ELSE '대여 가능' END) AS ABAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
문제 회고
1. MAX 사용
- 처음에 MAX를 사용하지 않고 CASE구문만 사용했을 때 틀린 결과가 나옴
- 제미나이를 활용해 틀린 부분과 이유를 찾아냄
- 이유:
- 한 자동차(CAR_ID)당 여러 개의 대여 기록이 존재하여
- GROUP BY로 자동차 별로 묶으면 '대여중'과 '대여 가능' 기록이 섞일 수 있음
- 문제에서 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시 라고 했으므로 MAX() 함수를 사용하여 하나라도
'대여중'이 있으면 '대여중'으로 출력하도록 해야함
- 배운점:
- MAX() 함수로 우선순위 결정이 가능하다
- '대여중'을 뽑고자 하였으므로 MAX()를 사용했지만, 반대로 '대여 가능'을 뽑고자 하였으면 MIN()을 사용해야 함
- 문제를 끝까지 잘 읽어야겠다
'코딩테스트' 카테고리의 다른 글
| [26.03.17 코테/회고(MySQL/Oracle)]-그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2026.03.17 |
|---|---|
| [26.03.16 코테/회고(MySQL/Oracle)]-자동차 대여 기록 별 대여 금액 구하기 (0) | 2026.03.16 |
| [26.03.12 코테/회고(MySQL/Oracle)]-대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2026.03.12 |
| [26.03.11 코테(MySQL/Oracle)]-특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2026.03.11 |
| [26.03.10 코테(MySQL)]-연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기 (0) | 2026.03.10 |