https://school.programmers.co.kr/learn/courses/30/lessons/157340
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT CAR_ID, CASE WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) >= 1 THEN '대여중'
ELSE '대여 가능'
END AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY 1 DESC
위에서는 **GROUP BY CAR_ID** 를 이용하여 중복되는 CAR_ID의 중복을 제거하고, 집계 함수**MAX()**를 통해 나머지 칼럼의 중복을 제거합니다.
SELECT CARS.CAR_ID, CASE WHEN RENTED.CAR_ID IS NULL THEN '대여 가능'
ELSE '대여중'
END AS AVAILABILITY
FROM (SELECT DISTINCT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY) AS CARS
LEFT JOIN
(SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE
) AS RENTED
ON CARS.CAR_ID = RENTED.CAR_ID
ORDER BY CARS.CAR_ID DESC
CARS 서브쿼리의 **SELECT DISTINCT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY**를 통해
CAR_ID의 중복을 제거한 CAR_ID 목록을 반환합니다.
RENTED 서브쿼리에서는 2022-10-16에 대여 중인 차량(START_DATE와 END_DATE 사이에 있는 차량)의 CAR_ID 목록을 반환합니다.
CARS와 RENTED를 CAR_ID 기준으로 LEFT JOIN하여, CARS에 있는 모든 차량 목록을 기준으로 RENTED와 매칭합니다.
RENTED.CAR_ID가 NULL이라면 해당 CAR_ID는 대여 가능으로 표시됩니다. NULL이 아니라면 대여중으로 표시됩니다.
'문제 풀이 > 프로그래머스 SQL' 카테고리의 다른 글
그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2024.11.11 |
---|---|
자동차 대여 기록에서 장기/단기 대여 구분하기 (0) | 2024.10.31 |
즐겨찾기가 가장 많은 식당 정보 출력하기, 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.10.14 |
조건에 맞는 사용자와 총 거래금액 조회하기 + HAVING 절 (1) | 2024.10.10 |
카테고리 별 도서 판매량 집계하기 (5) | 2024.10.02 |