[MySQL] programmers : 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
Problem
https://school.programmers.co.kr/learn/courses/30/lessons/151137
Idea
특정 옵션이 하나 이상 포함된 자동차가 종류 별로 얼마나 있는지 확인하고자 하므로 우선 자동차 종류로 그룹화한다. 이 때, 그룹화하기 이전에 WHERE문을 통해 특정 옵션이 포함되어 있는 레코드들만을 대상으로 그룹화한다.
옵션 속성에 해당 차량이 가지고 있는 옵션이 나열되어 있는 형태이므로 LIKE를 이용하여 해당 문자열에 특정 옵션이 포함되어 있는지 확인하고, OR문을 통해 하나 이상 포함되어 있는지 확인했다.
Code
SELECT
CAR_TYPE, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE "%통풍시트%" OR OPTIONS LIKE "%열선시트%" OR OPTIONS LIKE "%가죽시트%"
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;
Comment
LIKE와 OR을 연달아 사용하여 풀이하는 방식이 깔끔하지 않다고 생각하여 다른 방법이 있나 찾아 보았더니 정규 표현식(Regular Expression)이라는 방법이 있었다.
정규 표현식은 특정한 규칙을 가진 문자열들의 집합를 표현하는데 사용하는 형식 언어로써, MySQL에서는 REGEXP라는 키워드를 이용하여 사용한다고 한다.
다양한 기호를 사용하여 문자열 조건을 만들어낼 수 있는데 해당 문제의 경우 다음과 같이 정규 표현식으로 바꿀 수 있다.
WHERE OPTIONS LIKE "%통풍시트%" OR OPTIONS LIKE "%열선시트%" OR OPTIONS LIKE "%가죽시트%"
# 위를 정규 표현식으로 치환하면
Where OPTIONS REGEXP "통풍시트|열선시트|가죽시트"
정규 표현식에 관한 내용도 공부해 정리해야겠다…