inblog logo
|
DailyCoding
    CodingTestSQL

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

    박은서's avatar
    박은서
    Feb 27, 2026
    61. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
    Contents
    1. 문제2. 풀이
    2026.02.27(FRI)_61일차

    1. 문제

    문제 설명

    다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은 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

    2. 풀이

    정답

    SELECT tb1.MONTH, tb1.CAR_ID, COUNT(tb1.CAR_ID) 'RECORDS' FROM (SELECT CAR_ID, MONTH(START_DATE) 'MONTH' FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%') tb1 INNER JOIN (SELECT CAR_ID, COUNT(CAR_ID) 'COUNT' FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%' GROUP BY CAR_ID) tb2 ON tb1.CAR_ID = tb2.CAR_ID WHERE tb2.COUNT >= 5 GROUP BY tb1.MONTH, tb1.CAR_ID ORDER BY MONTH, CAR_ID DESC;
    MONTH
    CAR_ID
    RECORDS
    8
    28
    3
    8
    27
    5
    8
    25
    5
    8
    23
    3
    8
    19
    1
    8
    15
    2
    8
    13
    5
    8
    11
    1
    8
    10
    3
    8
    8
    6
    8
    7
    4
    8
    5
    4
    8
    2
    5
    9
    28
    2
    9
    27
    1
    9
    25
    6
    9
    23
    4
    9
    21
    1
    9
    20
    4
    9
    19
    3
    9
    18
    4
    9
    15
    2
    9
    13
    4
    9
    12
    4
    9
    11
    6
    9
    10
    5
    9
    8
    5
    9
    7
    1
    9
    5
    1
    9
    2
    1
    10
    23
    1
    10
    21
    5
    10
    20
    2
    10
    19
    1
    10
    18
    3
    10
    15
    2
    10
    13
    5
    10
    12
    2
    10
    10
    3
    10
    8
    5
    10
    7
    1
    10
    2
    1

    테이블 조회 (2022년 8월 ~ 2022년 10월 대여)

    SELECT * FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%';

    3개월 총 대여 횟수

    SELECT CAR_ID, COUNT(CAR_ID) 'COUNT' FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%' GROUP BY CAR_ID;

    INNER JOIN

    SELECT * FROM (SELECT CAR_ID, MONTH(START_DATE) FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%') tb1 INNER JOIN (SELECT CAR_ID, COUNT(CAR_ID) 'COUNT' FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%' GROUP BY CAR_ID) tb2 ON tb1.CAR_ID = tb2.CAR_ID;

    3개월 총 대여 횟수 5회 이상

    SELECT * FROM (SELECT CAR_ID, MONTH(START_DATE) FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%') tb1 INNER JOIN (SELECT CAR_ID, COUNT(CAR_ID) 'COUNT' FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%' GROUP BY CAR_ID) tb2 ON tb1.CAR_ID = tb2.CAR_ID WHERE tb2.COUNT >= 5;

    GROUP BY / ORDER BY (최종)

    SELECT tb1.MONTH, tb1.CAR_ID, COUNT(tb1.CAR_ID) 'RECORDS' FROM (SELECT CAR_ID, MONTH(START_DATE) 'MONTH' FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%') tb1 INNER JOIN (SELECT CAR_ID, COUNT(CAR_ID) 'COUNT' FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-08%' OR START_DATE LIKE '2022-09%' OR START_DATE LIKE '2022-10%' GROUP BY CAR_ID) tb2 ON tb1.CAR_ID = tb2.CAR_ID WHERE tb2.COUNT >= 5 GROUP BY tb1.MONTH, tb1.CAR_ID ORDER BY MONTH, CAR_ID DESC;
    Share article
    Contents
    1. 문제2. 풀이

    DailyCoding

    RSS·Powered by Inblog