로운's 기술노트

[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (regexp) 본문

내배캠_데이터분석가_'24.04~08/SQL

[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (regexp)

로운's 2024. 4. 22. 23:38

 

 

like 검색을 한 번에 여러 개 해주는 연산자가 있다고 한다!!

바로 regexp인데,

 

신기해서 바로 사용해 보았다.

사용방법은 아래와 같다.

where 컬럼명 regexp 정규식

 

ㅇ 정규식

. : 문자 하나
* : 앞 글자의 *개수 숫자 이상 반복
^ : 첫 값
$ : 끝값
[.] : 괄호 안의 문자열 일치 확인
{.} : 반복
| : or 

※ 이 외에도 더 많은 정규표현식이 있으니 필요할 시, 검색!

 

 

그러나

결국 'regexp'를 써서 틀렸다.

다른 풀이와 대조하여 따로 테스트했을 때, 결과는 같은데 뭐가 다를까?!

 

# start_date regexp ('2022-08%'|'2022-09%'|'2022-10%') as 'regexp' 
# START_DATE BETWEEN '2022-08-01' AND '2022-10-31' as 'BETWEEN'

 

튜터님께 문의해 보니 결과는 동일하나 문제 로직 상의 이유일 것으로 추정.

그리고 regexp의 경우는 이메일 등 특수문자 판별에 주로 사용되며,

형식만을 취해오는 구조이기 때문에 날짜와 같은 숫자 데이터 판별은 지양하는 것이 좋다.

또 보통 개발자들이 많이 사용하기는 하나, 기본 정규표현식 정도는 알아두면 도움이 된다고 한다.

결론 : 날짜 판별은 쓰던 대로 쓰자 ㅋㅋㅋ

 

 

 

 

정답

SELECT date_format(start_date,'%m') MONTH, car_id, count(*) RECORDS
from CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE (START_DATE BETWEEN '2022-08-01' AND '2022-10-31')
AND (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(history_id) >= 5
               )
    )
group by MONTH, car_id
order by MONTH, car_id desc;

Comments