- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
SELECT CAR_ID,
IF(CAR_ID IN
(SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16'), '대여중', '대여 가능')
AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
① SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16'
# 10월 16일 기준으로 history 를 조회해준다
② GROUP BY CAR_ID
# car_id 별로 그룹화를 해준다.
③ IF(CAR_ID IN
(SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16'), '대여중', '대여 가능')
AS AVAILABILITY
# SELECT 절에서 서브쿼리를 사용하여 WHERE 조건을 준 열만을 사용해 조회해준다.
대여 종료일이 10월16일 이후라면 대여중, 이전이라면 대여가능
Q. 서브쿼리를 사용하지 않고 그대로 IF 조건을 줄 경우에는 어떻게 나오는지?
A.
SELECT CAR_ID,
IF(START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16', '대여중', '대여 가능')
AS AVAILABILITY
, start_date
, end_date
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
car_id 가 그룹화가 되어있어
start_date 와 end_date 에는 car_id 의 첫번째 행이 입력된다.
그렇기 때문에 첫번째 행을 기준으로 IF 조건을 따르게 되어
원하던 값이 아닌 다른 결과가 출력된다
대여조건을 이해하지 못해서 조금 곤란했다..
10월16일 기준이므로 대여시작일도 신경써야함!
'SQL 코드카타' 카테고리의 다른 글
헤비 유저가 소유한 장소 # where 절 서브쿼리 (0) | 2024.04.04 |
---|---|
자동차 평균 대여 기간 구하기 (1) | 2024.04.04 |
조건에 맞는 사용자 정보 조회하기 # CONCAT(),SUBSTR() (0) | 2024.04.02 |
재구매가 일어난 상품과 회원 리스트 구하기 # GROUP BY (0) | 2024.04.02 |
즐겨찾기가 가장 많은 식당 정보 출력하기 # 다중컬럼 IN (0) | 2024.04.01 |