코딩테스트/SQL

[MySQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

rlatotquf45 2024. 10. 9. 10:34
728x90
반응형

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

문제 요약

주어진 문제는 자동차 대여 기록을 담고 있는 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차와 그렇지 않은 자동차를 구분하여 출력하는 SQL 쿼리를 작성하는 것입니다. 각 자동차는 여러 대여 기록을 가질 수 있으며, 해당 날짜에 대여 중인 자동차는 '대여중', 그렇지 않은 경우는 '대여 가능'으로 표시해야 합니다. 결과는 자동차 ID를 기준으로 내림차순 정렬해야 합니다.

풀이 방법

 

  • 그룹화(Grouping): 각 자동차(CAR_ID)는 여러 대여 기록이 있을 수 있으므로, CAR_ID를 기준으로 그룹화합니다.
  • 대여 상태 확인: 각 자동차의 대여 기록 중에서 2022년 10월 16일이 포함되는 대여 기록이 있는지 확인합니다. 이때, CASE 문과 MAX() 함수를 사용하여 대여 중 여부를 판별합니다.
  • CASE 문: 해당 자동차가 2022년 10월 16일에 대여 중이라면 '대여중', 그렇지 않으면 '대여 가능'으로 표시합니다.
  • 정렬: 결과는 자동차 ID를 기준으로 내림차순 정렬합니다.

 

정답 코드

-- 코드를 입력하세요
SELECT DISTINCT(CAR_ID), 
CASE
    WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) = 1 THEN '대여중'
    ELSE '대여 가능'
END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC

새롭게 배운 내용

  • 그룹화 시 MAX() 함수를 사용한 이유
    • 여러 대여 기록 처리: 각 자동차는 여러 번 대여될 수 있습니다. 따라서 CAR_ID를 기준으로 그룹화하여 각 자동차에 대한 여러 기록을 하나로 묶습니다.
    • 대여 중인 자동차 확인: MAX() 함수는 그룹화된 데이터에서 가장 큰 값을 반환하는 함수로, 조건('2022-10-16' BETWEEN START_DATE AND END_DATE)이 참인 값이 존재하는지 확인하는 데 사용됩니다. 만약 한 개의 기록이라도 2022년 10월 16일에 대여 중이라면, 그 조건은 참(True)이 되고, '대여중'으로 표시됩니다.
    • 안정적인 대여 상태 판단: MAX()를 사용함으로써 그룹 내에서 해당 조건이 만족되는 경우가 있는지 확인할 수 있으며, 이를 통해 각 자동차가 대여 중인지 아닌지를 정확히 판단할 수 있습니다.

 

728x90
반응형