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

는는·2023년 2월 2일
0

SQL - 문제 풀이

목록 보기
21/77

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

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

서브 쿼리로 풀어야하는 문제입니다.

1.(2022년 8월~ 2022년 10월 대여 횟수가 5회 이상인 car_id를 가져오고) 서브쿼리

2.(월별,자동차id별 총 대여 횟수를 구해야합니다.월의 총 대여 횟수가 0인 경우 결과 제외) 메인쿼리

먼저, 2022년 8월 ~ 2022년 10월의 car_id 아이디를 불러옵니다.

car_id IN(SELECT car_id 
FROM car_rental_company_rental_history WHERE date_format(start_date,'%Y-%m') BETWEEN '2022-08' AND '2022-10'
GROUP BY car_id
HAVING count(*) >= 5)

date_format으로 년 월만 보이게 변경해주고, WHERE절에서 2022년 8월 ~ 2022 10월 가져옵니다. 이제 car_id 별로 묶어주고, 대여 횟수가 5회인 데이터만 가져오면 1번은 끝입니다.

여기서 중요하게 가져와야하는 것은 IN은 OR 조건 이기 때문에 한가지 조건만 충족해도 가져온다는 것입니다. 대여 횟수가 5회 이상이고 날짜가 2022-08, 2022-10월인 데이터도 불러오지만, 그 데이터의 car_id 가 같은 데이터도 같이 불러오기 때문에 WHERE절에서 다시 2022-08, 2022-10월인 데이터를 가져와야 합니다.

WHERE
  date_format(start_date, '%Y-%m') BETWEEN '2022-08' AND '2022-10'

월, car_id , 대여횟수를 가져옵니다.

SELECT
  month(start_date) month,
  car_id,
  count(*) RECORDS
FROM
  car_rental_company_rental_history

월별, 자동차 id별 대여횟수를 불러와야하기에 GROUP BY 로 그룹을 만들어줍니다.

이제 특정 월의 총 대여 횟수가 0인 경우를 지워주고, 월 기준 오름차순, 자동차 id 기준 내림차순 해주면 정답입니다.

GROUP BY
  month,
  car_id
HAVING
  records > 0
ORDER BY
  month,
  car_id DESC

이제 모두 합쳐줘야합니다. 서브쿼리는 WHERE절에 넣어주시면 됩니다.

정답

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
      date_format(start_date, '%Y-%m') BETWEEN '2022-08' AND '2022-10'
    GROUP BY
      car_id
    HAVING
      count(*) >= 5
  )
  and date_format(start_date, '%Y-%m') BETWEEN '2022-08' AND '2022-10'
GROUP BY
  month,
  car_id
HAVING
  records > 0
ORDER BY
  month,
  car_id DESC

0개의 댓글

관련 채용 정보