[Oracle][Programmers] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

2025. 5. 28. 12:57·[Programmers]/- SQL

1. 문제

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

CAR_RETNAL_COMPANY_RENTAL_HISTORY

위 테이블에서 대여 시작일(START_DATE)을 기준으로 2022년 8월부터 2022년 10월까지의 총 대여 횟수가 5회 이상인 자동차들에 대해서 각 월별 자동차 ID의 총 대여 횟수(컬럼명 : RECORDS) 리스트를 출력하는 문제. 결과는 월(컬럼명 : MONTH)을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID(CAR_ID)를 기준으로 내림차순 정렬.

 

출력 형태는 다음과 같아야 한다.

2. 풀이

  • 대여 시작일 기준 2022년 8월부터 2022년 10월까지 :
    WHERE TO_CHAR(start_date, 'YYYYMM') BETWEEN '202208' AND '202210'
  • 각 자동차별 8, 9, 10월의 대여 횟수의 총 합이 5 이상 :
    GROUP BY car_id HAVING COUNT(history_id) >= 5
  • 각 월별 자동차 ID의 총 대여 횟수 :
    GROUP BY EXTRACT(MONTH FROM start_date), car_id
  • 월 기준 오름차순 정렬, 월이 같다면 자동차 ID 기준 내림차순 정렬
    ORDER BY month, car_id DESC

우선 첫 번째로 대여 시작일 기준 22년 8월부터 22년 10월까지의 총 대여 횟수가 5회 이상인 자동차들을 알아야 한다.

SELECT car_id
FROM car_rental_company_rental_history
WHERE TO_CHAR(start_date, 'YYYYMM') BETWEEN '202208' AND '202210'
GROUP BY car_id
HAVING COUNT(history_id) >= 5

 

이제 이 자동차들에 대해 각 월별 자동차 ID의 대여 횟수를 구해야 한다. 월(MONTH)은 시작일(START_DATE)에서 추출하면 되고 월별 대여 횟수는 COUNT( ) 함수를 사용하면 된다. 최종 쿼리는 다음과 같다. 위에서 구한 자동차들의 ID 목록 테이블과 기존 테이블을 JOIN하여 적절하게 그룹핑을 해주는 것이다.

SELECT EXTRACT(MONTH FROM c1.start_date) AS month,
        c2.car_id,
        COUNT(c1.history_id) AS records
FROM car_rental_company_rental_history c1
JOIN (
    SELECT car_id
    FROM car_rental_company_rental_history
    WHERE TO_CHAR(start_date, 'YYYYMM') BETWEEN '202208' AND '202210'
    GROUP BY car_id
    HAVING COUNT(history_id) >= 5
) c2 ON c2.car_id = c1.car_id
WHERE TO_CHAR(start_date, 'YYYYMM') BETWEEN '202208' AND '202210'
GROUP BY EXTRACT(MONTH FROM c1.start_date), c2.car_id
ORDER BY month, c2.car_id desc

 

저작자표시 비영리 (새창열림)

'[Programmers] > - SQL' 카테고리의 다른 글

[Oracle][Programmers] 자동차 대여 기록 별 대여 금액 구하기  (0) 2025.05.30
[Oracle][Programmers] 특정 기간동안 대여 가능한 자동차들의 대여 비용 구하기  (1) 2025.05.29
[Oracle][Programmers] 자동차 대여 기록에서 대여중/대여 가능 여부 구분하기  (1) 2025.05.27
[Oracle][Programmers] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기  (0) 2025.05.25
[Oracle][Programmers] 자동차 평균 대여 기간 구하기  (0) 2025.05.24
'[Programmers]/- SQL' 카테고리의 다른 글
  • [Oracle][Programmers] 자동차 대여 기록 별 대여 금액 구하기
  • [Oracle][Programmers] 특정 기간동안 대여 가능한 자동차들의 대여 비용 구하기
  • [Oracle][Programmers] 자동차 대여 기록에서 대여중/대여 가능 여부 구분하기
  • [Oracle][Programmers] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
Semincolon
Semincolon
It seems small, that semicolon is a big deal.
  • Semincolon
    Semincolon
    Semincolon
  • 전체
    오늘
    어제
    • 분류 전체보기 (133)
      • [Programming Language] (78)
        • [JSP] (6)
        • [Swift] (23)
        • [SwiftUI] (16)
        • [Python] (22)
        • [C언어] (6)
        • [Kotlin] (4)
        • [C#] (1)
      • [Frame Work] (5)
        • [Flutter] (4)
        • [Spring Boot] (1)
      • [Projects] (3)
        • [Android][Kotlin] 공유 캘린더(20.. (1)
        • [Unity] 인내의 숲(2024.03) (2)
      • [DB] (15)
        • - Oracle (15)
      • [Programmers] (25)
        • - SQL (25)
      • [ETC] (2)
      • Today's Learning (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Semincolon
[Oracle][Programmers] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
상단으로

티스토리툴바