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

임정민·2023년 5월 30일

SQL 문제풀이

목록 보기
46/53
post-thumbnail

SQL 공부중 입니다. ✍✍✍

문제

https://school.programmers.co.kr/learn/courses/30/lessons/151139

풀이

SELECT MONTH(START_DATE) "MONTH", CAR_ID , COUNT(HiSTORY_ID) "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(HISTORY_ID) >= 5)
                    AND START_DATE BETWEEN "2022-08-01" AND "2022-10-31"
    GROUP BY MONTH(START_DATE), CAR_ID
    ORDER BY MONTH(START_DATE) ASC, CAR_ID DESC;

서브쿼리, 2중 GROUP BY 등 매우 복잡한 문제였습니다. 먼저 서브쿼리를 통해 2022-08 ~ 2022-10까지 총 대여횟수가 5회 이상인 CAR_ID를 구하였습니다. 또한 다시 '해당 기간' (2022-08 ~ 2022-10)에 해당하는 동안의 월별, 자동차별 대여 횟수라고 언급했기 때문에 다시
AND START_DATE BETWEEN "2022-08-01" AND "2022-10-31" 구문을 넣어주어야 했습니다.
이 부분이 가장 헷갈려 풀이 시간이 생각보다 길어졌습니다.🐹🐹🐹

저의 풀이 이외에

SELECT
    MONTH(START_DATE) AS 'MONTH',
    CAR_ID,
    COUNT(HISTORY_ID) AS 'RECORDS'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY

WHERE CAR_ID IN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY

    WHERE YEAR(START_DATE) = '2022'
        AND MONTH(START_DATE) BETWEEN '8' AND '10'

    GROUP BY CAR_ID
    HAVING COUNT(HISTORY_ID) >= 5
        AND MONTH(START_DATE) BETWEEN '8' AND '10'
)

GROUP BY MONTH, CAR_ID
HAVING RECORDS > 0
ORDER BY MONTH ASC, CAR_ID DESC

서브쿼리 안에서 GROUP BY 이후 HAVING 절에 두가지 조건을 한번에 설정하여 해결한 풀이를 볼 수 있었습니다. 🐻🐻🐻

감사합니다.

profile
https://github.com/min731

0개의 댓글