문제가 원하는 것을 정리하면
1. 대여일을 기준으로 2022-8월 ~10까지 대여 횟수가 5이상인 자동차
2. 월별 자동차 ID별 리스트 출력
3. 월이 같다면 자동차 ID기준
테이블을 보고 하나씩 sql문을 작성해 나아가도록 하겠다.
먼저 1. 대여일을 기준으로 2022-8월 ~10까지 대여 횟수가 5이상인 자동차를 알기 위해 GROUP BY절을 이용하여 알아낸다.
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(*) >= 5
ORDER BY CAR_ID DESC
이제 대여 횟수가 5이상인 CAR_ID는 알아 냈으니 WHERE 절을 이용하여 해당 자동차들의 8월~10월 사이의 데이터만 조회한다.
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(*) >= 5
ORDER BY CAR_ID DESC
)
AND START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
그다음 2. 월별 자동차 ID별 리스트 출력 하기 위해 GROUP BY절을 이용한다.
GROUP BY MONTH(START_DATE), CAR_ID
마지막으로 3. 월이 같다면 자동차 ID기준은 ORDER BY를 사용한다.
ORDER BY MONTH(START_DATE) ASC, CAR_ID DESC;
이제 위 내용을 다 합치면 아래 sql이 만들어 진다.
SELECT MONTH(START_DATE) MONTH, CAR_ID, COUNT(*) 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(*) >= 5
ORDER BY CAR_ID DESC
)
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;
'코딩테스트' 카테고리의 다른 글
프로그래머스 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.09.08 |
---|---|
프로그래머스 헤비 유저가 소유한 장소 (0) | 2023.09.07 |
프로그래머스 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2023.09.07 |
프로그래머스 조건에 맞는 사용자 정보 조회하기 (0) | 2023.09.06 |
프로그래머스 없어진 기록 찾기 (0) | 2023.09.06 |