<문제 설명>
다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
column name | Type | Nullable |
history_id | INTEGER | FALSE |
car_id | INTEGER | FALSE |
start_date | DATE | FALSE |
end_date | DATE | FALSE |
<문제>
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
<나의 풀이>
select car_id,
case when car_id in
(select car_id
from car_rental_company_rental_history
where '2022-10-16' between start_date and end_date) then '대여중'
else '대여 가능' end 'AVAILABILITY'
from car_rental_company_rental_history
group by 1
order by 1 desc
서브쿼리를 이용한 문제 해결
2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가
- casw when 문 사용
- 서브쿼리를 사용해 2022-10-16이 대여 시작일과 끝나는 일에 포함하는 car_id를 구함
# 아래 두 가지 쿼리 모두 동일한 의미
start_date <= '2022-10-16' AND end_date >= '2022-10-16'
'2022-10-16' BETWEEN start_date AND end_date
- group by를 통해 car_id 별로 위에서 구한 조건 중 car_id가 조건에 해당한다면 '대여중' 그렇지 않으면 '대여가능'으로 표신 한 뒤 availiabilty라는 컬렴 출력
순서: car_id를 기준으로 내림차순
'CODEKATA' 카테고리의 다른 글
[MySQL] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2024.07.18 |
---|---|
[Python] 서울에서 김 서방 찾기 (0) | 2024.07.17 |
[Python] 콜라츠 추측 (0) | 2024.07.16 |
python codekata 22번 - 두 정수 사이의 합 (0) | 2024.07.15 |
Python codekata 21번 - 하샤드 수 (0) | 2024.07.12 |