노아

[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 본문

알고리즘/SQL

[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

Noaahhh 2024. 9. 19. 14:34

 

Question

 

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.

 

 

Pseudocode

 

 

  1. 서브쿼리(SELECT car_id ... HAVING COUNT(*) >= 5):
    • car_rental_company_rental_history 테이블에서 2022년 8월 1일부터 2022년 10월 31일까지의 기간에 대한 렌탈 기록을 찾고, 각 car_id별로 그룹화하여 렌탈 기록이 5회 이상인 차량을 필터링합니다.
  2. 메인쿼리:
    • 서브쿼리에서 반환된 car_id 목록에 있는 차량만을 대상으로 하고, 동일한 기간(2022-08-01부터 2022-10-31) 내에 시작된 렌탈 기록을 다시 찾습니다.
  3. GROUP BY:
    • Month(start_date)를 통해 각 렌탈 기록의 시작 월을 추출하고, car_id와 함께 그룹화합니다. 이를 통해 각 월별로 차량별 렌탈 기록 수를 계산합니다.
  4. ORDER BY:
    • 결과는 월(MONTH)을 기준으로 오름차순으로, 같은 월 내에서는 car_id를 기준으로 내림차순으로 정렬됩니다.

 

 

 

Code

 

SELECT Month(start_date) MONTH,
       car_id,
       Count(*)          RECORDS
FROM   car_rental_company_rental_history
WHERE  car_id IN(SELECT car_id
                 FROM   car_rental_company_rental_history
                 WHERE  start_date BETWEEN '2022-08-01' AND '2022-10-31'
                 GROUP  BY car_id
                 HAVING Count(*) >= 5)
       AND start_date BETWEEN '2022-08-01' AND '2022-10-31'
GROUP  BY month,
          car_id
ORDER  BY 1,
          2 DESC