DA Study/TIL

[TIL] 조건절에서 서브쿼리 활용하기 # MySQL # SQL

harrym8n 2025. 2. 1. 17:31

Programmers Lv3 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
👉 문제 바로가기(Programmers)

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'
GROUP BY
    MONTH(START_DATE), CAR_ID
HAVING
    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(*) >= 5)
ORDER BY
    MONTH, CAR_ID DESC

[문제 상황]

  • 최종 결과는 월별, car_id 별로 대여 횟수를 출력해야 한다.
  • 하지만 월별이 아닌 전체 기간 대여 횟수가 5회 이상인 car_id만 조회해야 한다는 조건이 있다.
  • 최종 결과를 조회하는 본 쿼리에서는 월별, car_id별로 그룹핑되어 있으므로 해당 조건을 바로 충족시킬 수 없다.

[해결]

  • Having절에 CAR_ID로만 그룹핑하여 조건을 만족시키는 서브쿼리를 사용한다.

[회고]

  • 월별 5회 이상이 아닌 전체 기간에서 5회 이상인 데이터를 출력하는 문제였는데 월별 5회라고 착각하여 자꾸 오류가 생겼다.
  • 문제를 꼼꼼하게 잘 읽고 원하는 결과를 출력하도록 노력해야곘다.
  • WHERE절, HAVING절에서의 서브쿼리는 활용도가 높을 것 같으므로 더 능숙해지도록 연습해야겠다.
  • 조건절에 서브쿼리를 사용하는 것 대신에 변수를 생성해서 조건절에 활용할 수 있지 않을까?