-
[SQL/프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기코딩테스트/프로그래머스 2023. 3. 17. 10:56
https://school.programmers.co.kr/learn/courses/30/lessons/151139
CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수 (컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.문제 자체를 이해하는데 시간이 조금 걸림.
처음에는 아래처럼 코드를 짰는데 이는 8월부터 10월까지 month와 car_id를 기준으로 총 대여 횟수가 5회 이상인 값들만 출력하게 했다. 이말은 즉슨 ) 8월에 5회 이상 9월에 5회 이상 이런식으로 출력했더 것.!
이렇게 출력하는 것이 아닌 8, 9, 10 합쳐서 대여 횟수가 5회 이상이면 출력하도록 해야한다.
SELECT extract(month from start_date) as MONTH, car_id, count(CAR_ID) as RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE BETWEEN TO_DATE('2022-08-01','YYYY-MM-DD') AND TO_DATE('2022-10-31','YYYY-MM-DD') Group by extract(month from start_date), car_id having count(CAR_ID) >=5 order by month, car_id desc;
따라서 서브쿼리를 이용해 car_id를 기준으로 대여한 횟수가 5회 이상인 값을 먼저 구하고 이에 출력되는 데이터의 값을 메인 쿼리에서 다루게 했다 .
SELECT extract(month from start_date) as MONTH, car_id, count(CAR_ID) as RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY where car_id in ( select car_id from CAR_RENTAL_COMPANY_RENTAL_HISTORY -- WHERE START_DATE BETWEEN TO_DATE('2022-08-01','YYYY-MM-DD') -- AND TO_DATE('2022-10-31','YYYY-MM-DD') where extract(month from start_date) between 8 and 10 group by car_id having count(*) >=5 ) AND START_DATE BETWEEN TO_DATE('2022-08-01','YYYY-MM-DD') AND TO_DATE('2022-10-31','YYYY-MM-DD') Group by extract(month from start_date), car_id order by month, car_id desc;
반응형'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[SQL/프로그래머스] 입양 시각 구하기(2) , CONNECT BY (0) 2023.03.22 [SQL/프로그래머스] 헤비 유저가 소유한 장소 , 다중행 서브쿼리, 인라인뷰, 분석함수 (0) 2023.03.16 [SQL/프로그래머스] 오랜 기간 보호한 동물(1) rownum, rank() (0) 2023.03.15 [SQL/프로그래머스] 없어진 기록 찾기 (NOT IN, NOT EXISTS) (0) 2023.03.15 [SQL/프로그래머스] 조건에 맞는 회원수 구하기, 특정 날짜 조건 주기 (0) 2023.01.20