https://school.programmers.co.kr/learn/courses/30/lessons/151139
SELECT MONTH(start_date) AS month,
car_id,
COUNT(*) AS records
FROM car_rental_company_rental_history
WHERE start_date >= '2022-08-01'
AND start_date < '2022-11-01'
GROUP BY MONTH(start_date),
car_id
HAVING COUNT(*) >= 5
이렇게 하면 각 월별로 5번 이상 빌린 차에 대해서만 나오기 때문에 오답이 된다.
8월부터 10월까지 car_id별 대여 건수를 출력하는 쿼리를 먼저 작성해보았다.
SELECT car_id,
COUNT(*) AS cnt
FROM car_rental_company_rental_history
WHERE start_date >= '2022-08-01'
AND start_date < '2022-11-01'
GROUP BY car_id
HAVING COUNT(*) >= 5
ORDER BY cnt DESC
이 car_id 정보를 이용할 수 있는 방법이 있으면 될텐데 ...
WHERE절 서브쿼리를 사용해보았다.
정답 쿼리는 다음과 같다.
1. 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 차량의 car_id를 출력하는 쿼리문을 작성
2. WHERE + IN 을 사용해서 1번에서 작성한 서브쿼리의 car_id 리스트에 포함되는 car_id만 가져옴
3. 2022년 8월부터 2022년 10월까지의 데이터만 가져오기 위해 WHERE 절에 조건 추가
4. month와 car_id로 GROUP BY
5. COUNT(*) 를 사용해서 column의 개수를 세줌
6. 정렬 조건 작성
SELECT MONTH(start_date) AS month,
car_id,
COUNT(*) AS records
FROM car_rental_company_rental_history
WHERE car_id IN (
SELECT car_id
FROM car_rental_company_rental_history
WHERE start_date >= '2022-08-01'
AND start_date < '2022-11-01'
GROUP BY car_id
HAVING COUNT(*) >= 5
)
AND start_date >= '2022-08-01'
AND start_date < '2022-11-01'
GROUP BY MONTH(start_date),
car_id
ORDER BY month, car_id DESC
어찌저찌 풀긴 했지만 좋은 풀이는 아닌것같다.
다른 사람들의 풀이를 찾아보았다!
위 글을 참고하여 다시 작성해본 쿼리문은 다음과 같다.
SELECT MONTH(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 MONTH(start_date) BETWEEN 8 AND 10
GROUP BY car_id
HAVING COUNT(car_id) >= 5
)
AND MONTH(start_date) BETWEEN 8 AND 10
GROUP BY month, car_id
HAVING records > 0
ORDER BY month,
car_id DESC
전반적인 접근은 비슷한데,
이때 start_date의 월과 관련된 조건을 BETWEEN으로 깔끔하게 작성할 수 있다는걸 배웠다!
'SQL > 문제풀이' 카테고리의 다른 글
[프로그래머스] 저자 별 카테고리 별 매출액 집계하기 (0) | 2024.01.05 |
---|---|
[프로그래머스] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.01.03 |
[프로그래머스] 오랜 기간 보호한 동물 (1) (0) | 2024.01.02 |
[프로그래머스] 조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2024.01.02 |
[프로그래머스] 상품별 오프라인 매출 구하기 (0) | 2024.01.02 |