대여 기록이 존재하는 자동차 리스트 구하기
String, Date
대여 기록이 존재하는 자동차 리스트 구하기
문제 설명
다음은 자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블과 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다.
CAR_RENTAL_COMPANY_CAR 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
CAR_ID | INTEGER | FALSE | 자동차 ID |
CAR_TYPE | VARCHAR(255) | FALSE | 자동차 종류 |
DAILY_FEE | INTEGER | FALSE | 일일 대여 요금(원) |
OPTIONS | VARCHAR(255) | FALSE | 자동차 옵션 리스트 |
자동차 종류는 ‘세단’, ‘SUV’, ‘승합차’, ‘트럭’, ‘리무진’이 있습니다.
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
HISTORY_ID | INTEGER | FALSE | 자동차 대여 기록 ID |
CAR_ID | INTEGER | FALSE | 자동차 ID |
START_DATE | DATE | FALSE | 대여 시작일 |
END_DATE | DATE | FALSE | 대여 종료일 |
문제
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 ‘세단’인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.
풀이 과정
- JOIN을 통한 테이블 결합
- 두 테이블을 CAR_ID를 기준으로 INNER JOIN
- 필터링 조건 설정
- WHERE 조건에서 자동차 종류가 ‘세단’인 경우만 선택
START_DATE
가 10월인 데이터를 선택하기 위해 : MONTH(START_DATE
) = 10 조건 사용
- 결과 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
CAR_ID
기준으로 내림차순 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
- 중복 제거
- 중복을 제거 위해 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
Useful link
This post is licensed under Park Juyoung by the author.