CODEKATA : SQL 69

COZY·2024년 4월 30일

CODEKATA

목록 보기
6/11
post-thumbnail

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

select month(start_date) as 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 month(start_date) between 8 and 10
                  group by car_id
                  having count(*) > 4
                )
and month(start_date) between 8 and 10
group by MONTH, car_id
order by MONTH, car_id desc

생각해 볼 포인트

  • 대여 시작일을 어떻게 '월'만 표현할 것인가?

    MONTH()함수를 사용하면 날짜 데이터에서 월에 해당하는 값을 mm의 형태로 변환할 수 있다.
    (년이면 YEAR(), 일이면 DAY()를 사용할 수 있다.)

  • 5회 이상 대여한 자동차를 어떻게 조건지을 것인가?

    COUNT를 두번 사용해야 하기에, 그룹이 애매해 질 수 있으므로
    이 조건은 인라인 쿼리를 사용해 WHERE절에 구성한다.
    CAR ID를 기준으로 한 그룹에, 해당 월에 해당하는 조건을 매기고,
    HAVING절을 활용하여 COUNT(*)한 결과가 5이상인 값을 추출한다.
    이 결괏값이 메인 쿼리의 CAR ID에 해당된다면(IN) 조건을 만족하게 된다.

WHERE절에 인라인쿼리를 사용하게 되면, 종종 마주친다는 에러코드가 있다. 전설괴담같다
operand should contain 1 column(s)
해석하면 메인 쿼리에 사용된 컬럼은 한 개 뿐인데, 인라인 쿼리에서 나오는 컬럼은 2개 이상이라는 뜻.
양쪽 쿼리의 컬럼 수를 맞춰주면 해결된다.

profile
데이터분석 공부하는 비전공자

0개의 댓글