https://school.programmers.co.kr/learn/courses/30/lessons/157340
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
풀이 - 1
count 사용
SELECT car_id,
CASE
WHEN COUNT(
CASE
WHEN '2022-10-16' BETWEEN start_date AND end_date
THEN 1
END
) > 0
THEN '대여중'
ELSE '대여 가능'
END AS availability
FROM car_rental_company_rental_history
GROUP BY car_id
ORDER BY car_id DESC;
car_id 가 중복되어 나오므로 GROUP BY 를 통해 집계, count 함수를 사용하여 '2022-10-16' 사이에 start_date, end_date가 존재 시 대여중, 아닐시 대여 가능으로 표시
풀이 - 2
exists 사용
SELECT DISTINCT car_id,
CASE
WHEN EXISTS (
SELECT 1
FROM car_rental_company_rental_history h2
WHERE h2.car_id = h1.car_id
AND '2022-10-16' BETWEEN h2.start_date AND h2.end_date
)
THEN '대여중'
ELSE '대여 가능'
END AS availability
FROM car_rental_company_rental_history h1
ORDER BY car_id DESC;
EXISTS 함수 사용, 서브 쿼리를 사용하여 car_id 별로 의 대여 여부를 파악 하게 만듬
'코딩 테스트 > SQL' 카테고리의 다른 글
| [프로그래머스 - LEVEL 3] 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 (0) | 2026.04.20 |
|---|---|
| [프로그래머스 - LEVEL 3] 부서별 평균 연봉 조회하기 (0) | 2026.04.20 |
| [프로그래머스 - LEVEL 4] 프론트엔드 개발자 찾기 ⛔️ (0) | 2026.03.26 |
| [프로그래머스 LEVEL 4] 5월 식품들의 총매출 조회하기 (0) | 2026.03.25 |
| [프로그래머스 LEVEL 4] 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2026.03.25 |