[SQL] 여러 개의 데이터 중 하나라도 조건을 만족하는 경우

kimgwon·2025년 3월 7일

SQL

목록 보기
4/4

다음과 같은 테이블에서,
2022년 10월 16일에 대여 중인 자동차는 '대여 중' 아닌 자동차는 '대여 가능'으로 출력해야 할 때 쿼리문을 살펴보자.


풀이

해당 쿼리의 경우 서브쿼리를 이용하여 데이터가 많아질수록 성능이 저하될 수 있다.

SELECT CAR_ID,
    CASE
        WHEN CAR_ID IN 
            (
                SELECT CAR_ID
                FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
                WHERE 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;

개선

MAX를 이용하여 동일한 CAR_ID가 여러 개 있을 경우, 하나라도 1이면 대여중으로 표시하면 된다.

SELECT CAR_ID,
       CASE 
           WHEN MAX(CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN 1 ELSE 0 END) = 1 
           THEN '대여중' 
           ELSE '대여 가능' 
       END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

0개의 댓글