문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/151139
문제에서 주어진 조건은 다음과 같다.
1. 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지
2. 총 대여 횟수가 5회 이상인 자동차
3. 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS)
4. 월 기준 오름차순, 자동차 id 기준 내림차순, 0이면 제외
이를 기반으로 문제를 풀어보자.
내 풀이
-- 기준일에 대하여 총 대여 횟수가 5회 이상인 자동차 뽑기
WITH w1 AS (
SELECT CAR_ID, COUNT(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
)
-- 월별 자동차 ID별 총 대여 횟수 찾기
SELECT MONTH(h.START_DATE) AS MONTH
, h.CAR_ID
, COUNT(h.CAR_ID) AS RECORDS
FROM w1 INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY h
ON w1.CAR_ID = h.CAR_ID
WHERE h.START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY MONTH(h.START_DATE), CAR_ID
ORDER BY MONTH(h.START_DATE), CAR_ID DESC;
먼저, 기준일에 대하여 총 대여 횟수가 5회 이상인 자동차를 뽑는 서브쿼리를 정의한다.
2022년 8월 1일부터 2022년 10월 31일까지 대여 시작일(START_DATE)을 기준으로
각 자동차의 대여 횟수를 계산한다.
히우, 자동차 ID(CAR_ID)에 대하여 GROUP BY 를 진행하며,
이 때의 그룹화의 기준을 COUNT(CAR_ID)가 5회 이상인 것으로 그룹화한다!
위의 서브쿼리에서 뽑은 자동차 ID를 기준으로 본 테이블(CAR_RENTAL_COMPANY_RENTAL_HISTORY)과 JOIN한다.
주의할 점은 여기서도 대여 시작일을 명시해줘야 한다는 것이다. (이것을 명시하지 않아서 한참을 헤맸다)
-> 예를 들어 8~10월 사이에 5건 이상이 존재하고, 7월에도 대여건이 존재한다면, 7월에 해당하는 대여건까지 결과로 나오게 된다.
더불어, GROUP BY를 활용해 월별 및 자동자ID 별로 그룹화를 하면 원하는 쿼리가 도출된다.
다른 사람 풀이
SELECT
MONTH(h.START_DATE) AS MONTH,
h.CAR_ID,
COUNT(h.CAR_ID) AS RECORDS
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY h
WHERE
h.START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
AND h.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(h.START_DATE), h.CAR_ID
ORDER BY
MONTH(h.START_DATE), h.CAR_ID DESC;
내가 한 풀이와 매우 유사한 풀이이지만, CTE를 사용하지 않은 정답도 함께 남긴다.
'코딩테스트 > SQL' 카테고리의 다른 글
[프로그래머스][MySQL] Lv. 3 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.07.30 |
---|---|
[프로그래머스][MySQL] Lv. 4 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.07.29 |
[프로그래머스][MySQL] Lv. 4 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2024.07.19 |
[프로그래머스][MySQL] Lv. 4 FrontEnd 개발자 찾기 (1) | 2024.07.17 |
[프로그래머스][MySQL] Lv. 4 주문량이 많은 아이스크림들 조회하기 (0) | 2024.07.16 |