<CAR_RENTAL_COMPANY_RENTAL_HISTORY> 테이블 구조
<문제>
<문제 풀이>
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
HAVING RECORDS > 0
ORDER BY MONTH(START_DATE), CAR_ID DESC;
문제의 접근 자체가 상당히 어려웠었다. 예상 결과셋을 보고 cross join 문제인가로 생각하여 사고를 잘못 접근한 것으로 애를 먹었다.
문제 자체는 지난 문제들의 짬뽕2 였다. (WHERE 절 서브쿼리 + 날짜 BETWEEN A AND B)
우선 서브쿼리로 문제에서 요구하는 사항관련에 해당하는 car_id 에 대한 날짜와 대여횟수로 구문을 짠다.
그 다음 해당 car_id 들이 메인쿼리 에 포함되는 서브쿼리로 만들어 준다.
마지막으로 메인쿼리 group에 첫번째 쿼리와 두번째 쿼리를 넣어준다.
문제를 풀다 한번 잘못 접근한 것을 새로운 방법으로 접근 하는 사고를 해야할 필요가 있다. 그 부분이 어느 시점일까에 대한 고민이 필요한것 같다..!
* GROUP BY A, B : A와 B로 그룹화를 진행 하고 출력 값은 A,B 순으로 사전 편찬식이다!
'IT > SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.01.24 |
---|---|
[MySQL] 프로그래머스 - 보호소에서 중성화한 동물 (0) | 2024.01.24 |
[MySQL] 프로그래머스 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (1) | 2024.01.24 |
[MySQL] 프로그래머스 - 헤비 유저가 소유한 장소 (0) | 2024.01.24 |
[MySQL] 프로그래머스 - 자동차 대여 기록에서 대여 중 / 대여 가능 여부 구분하기 (0) | 2024.01.23 |