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

도지는·2024년 4월 11일

SQL

목록 보기
1/1

📚 문제

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


🖍️ 풀이

  1. where절 서브쿼리에서 8~10월 사이의 대여 횟수가 5회 이상인 자동차 ID를 추출
  2. 그 아이디들 중 8~10월 기간의 월별 대여 횟수를 출력

😭 실수

틀린 코드에서 WHERE절 서브쿼리에서 '8~10월 사이의 대여횟수가 5 이상인 CAR_ID'를 추출하더라도 메인 쿼리에서 8~10월 날짜 조건을 안 걸어줘서 틀림

EX)
ID가 1인 자동차의 8~10월 총 대여횟수가 6이고 7월 대여횟수가 5일 때,
메인 쿼리에서 날짜 조건을 걸어주지 않으면 7월 대여횟수도 출력될 수 있음


❌ 틀린 코드

SELECT TO_NUMBER(TO_CHAR(START_DATE, 'FMMM')) AS MONTH, CAR_ID, COUNT(TO_CHAR(START_DATE, 'FMMM')) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
           WHERE TO_CHAR(START_DATE, 'MM') IN ('08', '09', '10')
           GROUP BY CAR_ID
           HAVING COUNT(CAR_ID) >= 5) -- 총 대여횟수가 5회이상인 자동차 중
GROUP BY TO_NUMBER(TO_CHAR(START_DATE, 'FMMM')), CAR_ID
HAVING COUNT(TO_CHAR(START_DATE, 'FMMM')) > 0
ORDER BY 1, 2 DESC

💻 정답 코드

SELECT TO_NUMBER(TO_CHAR(START_DATE, 'FMMM')) AS MONTH, CAR_ID, COUNT(TO_CHAR(START_DATE, 'FMMM')) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
           WHERE TO_CHAR(START_DATE, 'MM') IN ('08', '09', '10')
           GROUP BY CAR_ID
           HAVING COUNT(CAR_ID) >= 5) -- 8~10월 사이 총 대여횟수가 5회이상인 자동차 중
AND TO_CHAR(START_DATE, 'MM') IN ('08', '09', '10') -- 8~10월 사이 기록만 출력
GROUP BY TO_NUMBER(TO_CHAR(START_DATE, 'FMMM')), CAR_ID
HAVING COUNT(TO_CHAR(START_DATE, 'FMMM')) > 0
ORDER BY 1, 2 DESC
profile
왕왕

0개의 댓글