Rootable의 개발일기
프로그래머스 SQL 풀이 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/157340
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
결과 예시
풀이
1. Case when 절을 통해 "대여중"과 "대여 가능"으로 나누자
문제에서 2022년 10월16일에 대여 중인 경우인지 아닌지를 확인해 달라고 했다. 그래서 if/else 문처럼 둘 중 한 경우만 나오도록 해야 한다.
2. Group By 사용
그룹핑 없이 조건만 넣어서 결과를 조회해보면 CAR_ID 당 여러 결과가 나오는 것을 알 수 있다.
그룹핑이 없어 동일 ID에 대해 '대여중'과 '대여 가능' 데이터가 함께 나타나는 것이다.
3. 조건문에 IN을 사용하자
2022년 10월16일에 대여가 가능한지만 알고 싶은 것이다. BETWEEN ~ AND를 통해 해당 날짜가 대여 시작일과 종료일 사이에 포함되는지 확인하면 된다. 그래서 IN을 통해 서브 쿼리 결과를 만족한다면 "대여중"으로 하고 그렇지 않으면 "대여 가능"으로 처리했다.
정답 코드
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 as AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
'프로그래머스 - SQL Kit' 카테고리의 다른 글
프로그래머스 SQL 풀이 - 저자 별 카테고리 별 매출액 집계하기 (0) | 2023.05.23 |
---|---|
프로그래머스 SQL 풀이 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.05.23 |
프로그래머스 SQL 풀이 - 조건에 맞는 회원수 구하기 (0) | 2023.05.22 |
프로그래머스 SQL 풀이 - 오프라인/온라인 판매 데이터 통합하기 (0) | 2023.05.19 |
프로그래머스 SQL 풀이 - 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.05.19 |