Post

대여 기록이 존재하는 자동차 리스트 구하기

String, Date

대여 기록이 존재하는 자동차 리스트 구하기


문제 설명

다음은 자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블과 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다.


CAR_RENTAL_COMPANY_CAR 테이블

Column nameTypeNullableDescription
CAR_IDINTEGERFALSE자동차 ID
CAR_TYPEVARCHAR(255)FALSE자동차 종류
DAILY_FEEINTEGERFALSE일일 대여 요금(원)
OPTIONSVARCHAR(255)FALSE자동차 옵션 리스트

자동차 종류는 ‘세단’, ‘SUV’, ‘승합차’, ‘트럭’, ‘리무진’이 있습니다.


CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블

Column nameTypeNullableDescription
HISTORY_IDINTEGERFALSE자동차 대여 기록 ID
CAR_IDINTEGERFALSE자동차 ID
START_DATEDATEFALSE대여 시작일
END_DATEDATEFALSE대여 종료일




문제

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 ‘세단’인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.




풀이 과정
  1. JOIN을 통한 테이블 결합
    • 두 테이블을 CAR_ID를 기준으로 INNER JOIN
  2. 필터링 조건 설정
    • WHERE 조건에서 자동차 종류가 ‘세단’인 경우만 선택
    • START_DATE가 10월인 데이터를 선택하기 위해 : MONTH(START_DATE) = 10 조건 사용
  3. 결과 정렬
    • 정렬 기준에 따라 ORDER BY로 결과 정렬
      • CAR_ID 기준으로 내림차순 정렬
  4. 중복 제거
    • 중복을 제거 위해 DISTINCT
  • 교훈
    • 중복된 데이터가 포함된 테이블에서 고유한 결과를 얻고자 할 때 distinct 사용하여 정렬하자!!!




정답

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT DISTINCT 
    C.CAR_ID
FROM 
    CAR_RENTAL_COMPANY_CAR C
JOIN 
    CAR_RENTAL_COMPANY_RENTAL_HISTORY H 
ON 
    C.CAR_ID = H.CAR_ID
WHERE 
    C.CAR_TYPE = '세단' 
    AND EXTRACT(MONTH FROM H.START_DATE) = 10
ORDER BY 
    C.CAR_ID DESC;


Tip

날짜 필터링

  • EXTRACT(MONTH FROM date_column) : 날짜에서 월 추출




개념 확인

  • EXTRACT() 함수
    • 날짜 데이터에서 특정 연도나 월을 추출하는 데 사용
    • 오라클과 MySQL에서 모두 지원됨
    • EXTRACT(YEAR FROM DATE타입컬럼값) 형태로 사용
    • 추출 가능한 값:
      • 연도: YEAR
      • : MONTH
      • : DAY
      • 시간: HOUR
      • : MINUTE
      • : SECOND




대여 기록이 존재하는 자동차 리스트 구하기

This post is licensed under Park Juyoung by the author.

Trending Tags