2023-03-08 수요일

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


💡 문제 해석

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능' 을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중' 으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.


💡 요약

  1. 2022년 10월 16일 기준
  2. '대여 중', '대여 가능' 표기 / 컬럼명 AVAILABILITY
  3. 자동차ID, AVAILABILITY 출력
  4. 자동차ID 기준 내림차순 정렬

1. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블 전체 출력하기

SELECT * FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY

💻 출력

💡 컬럼 설명

  • HISTORY_ID - INTEGER(N) - 자동차 대여 기록 ID
  • CAR_ID - INTEGER(N) - 자동차 ID
  • START_DATE - DATE - 대여 시작일
  • END_DATE - DATE - 대여 종료일

2. CASE문 사용하여 '2022-10-16' 특정일에 대한 조건 걸기

MAX (CASE 
      WHEN '2022-10-16' BETWEEN 
                              DATE_FORMAT(start_date, '%Y-%m-%d')
                              AND
                              DATE_FORMAT(end_date, '%Y-%m-%d')
      THEN '대여중'
      ELSE '대여 가능'
	END) AS AVAILABILITY

💻 출력

💡 링크 첨부

- 날짜를 기준으로 데이터를 조회하는 방법

💡 해석

  • '2022-10-16' 을 기준으로 start_date와 end_date사이의 기간은 '대여중' 이라고 표시하고 그 외는 '대여 가능'이라고 표시한다.

  • 이 모든 컬럼의 명명은 AVAILABILITY 로 지정한다.

  • 이 데이터들 중에서도 최대값(MAX)를 선별해냈다.


3. 자동차ID와 AVAILABILITY 출력하기

SELECT car_id
        , MAX(
            CASE
            WHEN '2022-10-16' BETWEEN 
                                    DATE_FORMAT(start_date, '%Y-%m-%d')
                                    AND
                                    DATE_FORMAT(end_date, '%Y-%m-%d')
          THEN '대여중'
          ELSE '대여 가능'
          END) AS AVAILABILITY
  FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY car_id

💻 출력


4. 자동차ID를 기준으로 내림차순 정렬하기

SELECT car_id
        , MAX(
            CASE
            WHEN '2022-10-16' BETWEEN 
                                    DATE_FORMAT(start_date, '%Y-%m-%d')
                                    AND
                                    DATE_FORMAT(end_date, '%Y-%m-%d')
          THEN '대여중'
          ELSE '대여 가능'
          END) AS AVAILABILITY
  FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
 GROUP BY car_id
 ORDER BY car_id DESC

💻 출력


5. 그 외 출력

SELECT car_id,
      MAX ( CASE
           		WHEN start_date <= '2022-10-16' AND end_date >= '2022-10-16' 
                THEN '대여중'
           		ELSE '대여 가능'
       		END) AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY car_id
ORDER BY car_id DESC;

💡 chatGPT 사용 : MAX() 함수를 사용한 이유

MAX() 함수를 여기서 왜 꼭 사용해야하는지 계속 의문이 들었다.

MAX 함수는 CASE문의 결과 중에서 가장 큰 값을 선택하여 반환합니다.
이 경우에는 '대여중'이 '대여 가능'보다 크다고 판단하여,
대여 기간 중 대여 중인 경우에는 '대여중' 값을 반환하고,
대여 중이 아닌 경우에는 '대여 가능' 값을 반환합니다.

profile
지속적인 성장을 추구하는 새싹 개발자입니다🌱

0개의 댓글