inblog logo
|
jjack1
    프로그래머스MySQL코딩테스트

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

    최재원's avatar
    최재원
    May 11, 2025
    [프로그래머스] (MySQL) 47. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
    💡

    문제 설명

    다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.
    Column name
    Type
    Nullable
    HISTORY_ID
    INTEGER
    FALSE
    CAR_ID
    INTEGER
    FALSE
    START_DATE
    DATE
    FALSE
    END_DATE
    DATE
    FALSE
    💡

    문제

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

    예시

    예를 들어 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블이 다음과 같다면
    HISTORY_ID
    CAR_ID
    START_DATE
    END_DATE
    1
    1
    2022-07-27
    2022-08-02
    2
    1
    2022-08-03
    2022-08-04
    3
    2
    2022-08-05
    2022-08-05
    4
    2
    2022-08-09
    2022-08-12
    5
    3
    2022-09-16
    2022-10-15
    6
    1
    2022-08-24
    2022-08-30
    7
    3
    2022-10-16
    2022-10-19
    8
    1
    2022-09-03
    2022-09-07
    9
    1
    2022-09-18
    2022-09-19
    10
    2
    2022-09-08
    2022-09-10
    11
    2
    2022-10-16
    2022-10-19
    12
    1
    2022-09-29
    2022-10-06
    13
    2
    2022-10-30
    2022-11-01
    14
    2
    2022-11-05
    2022-11-05
    15
    3
    2022-11-11
    2022-11-11
    대여 시작일을 기준으로 총 대여 횟수가 5회 이상인 자동차는 자동차 ID가 1, 2인 자동차입니다. 월 별 자동차 ID별 총 대여 횟수를 구하고 월 오름차순, 자동차 ID 내림차순으로 정렬하면 다음과 같이 나와야 합니다.
    MONTH
    CAR_ID
    RECORDS
    8
    2
    2
    8
    1
    2
    9
    2
    1
    9
    1
    3
    10
    2
    2
     

    코드

    SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31' AND 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(CAR_ID) >= 5 ) GROUP BY MONTH(START_DATE), CAR_ID ORDER BY MONTH ASC, CAR_ID DESC;
    notion image
     

    풀이 순서

    1. 조건에 맞는 날짜 필터링
      1. 시작일을 기준으로 2022년 8월부터 2022년 10월까지
      2. WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
        notion image
    1. 차량별 전체 대여 횟수 구하기
      1. 총 대여 횟수가 5회 이상인 자동차들
      2. 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(CAR_ID) >= 5
        notion image
    1. 월별(MONTH + CAR_ID)로 그룹핑해서 대여 횟수 집계
      1. 에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성
      2. FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31' AND 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(CAR_ID) >= 5 ) GROUP BY DATE_FORMAT(START_DATE, '%c'), CAR_ID
    1. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외
      1. COUNT(*)는 0인 데이터가 애초에 존재하지 않음
    1. 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬
      1. ORDER BY MONTH ASC, CAR_ID DESC
    1. 주의 사항!
      1. 문자열임
        1. DATE_FORMAT(START_DATE, '%c')
          notion image
      2. 숫자임
        1. MONTH(START_DATE)
          notion image
      3. 정렬을 하려면 숫자를 사용해야 함
    Share article

    jjack1

    RSS·Powered by Inblog