[프로그래머스] SQL 고득점 kit(대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기)

728x90

1. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

 

문제 설명

 

다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 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년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.

 

풀이

-- 코드를 입력하세요
SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10'
AND CAR_ID IN (SELECT CAR_ID
              FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
              WHERE DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10'
              GROUP BY CAR_ID
              HAVING COUNT(CAR_ID) >= 5)
GROUP BY CAR_ID, MONTH
HAVING RECORDS >= 1
ORDER BY MONTH ASC, CAR_ID DESC;

 

  1. 대여 시작일이 2022년 8월부터 10월까지인 기록을 선택한다.
  2. 선택된 기록 중에서 각 자동차별로 대여 기록이 5회 이상인 자동차의 CAR_ID를 서브쿼리를 사용하여 선택한다.
  3. 대여 기록이 있는(대여 횟수가 0이 아닌) 월에 대하여 월별, 자동차별 대여 기록 수를 COUNT 하여 결과를 생성한다

 

 

코드를 보면 어렵지 않고 충분히 할 수 있을 것 같은데 문제만 봤을 때 떠올리기가 쉽지 않은 것 같다.

벌써 LV3까지 다 풀었는데 실력은 잘 늘지 않는 듯 ㅠ    

 

그래도 킵고잉~ 

 

728x90