본문 바로가기
데이터분석가/SQL

[MySQL] IN과 REGEXP

by chan's chance 2023. 3. 4.

WHERE 혹은 HAVING 을 통해 필터를 사용하는 경우,

IN과 REGEXP를 사용한 조건식을 사용하는 경우가 많다.

보통, IN은 해당 컬럼 값이 'A' 와 같이 단일값일 때 사용한다.

예를 들어, 사무용품 컬럼에 '책상', '의자', '모니터', '컴퓨터' 의 값이 있다고 할 때,

사무용품 컬럼에 '책상', '의자' 의 단일 값만을 갖는 인스턴스를 추출하고자 하는 경우,

SELECT * FROM TABLE
WHERE 사무용품이름 IN ('책상', '의자')

위 커리를 통해 추출할 수 있다.

하지만, 주의해서 사용해야 하는 점은 해당 컬럼의 값이 단일값이 아닌 다중 값의 경우

위 쿼리를 통해 추출할 수 없다.

이러한 경우 REGEXP를 통해 추출할 수 있다.

SELECT * FROM TABLE
WHERE 사무용품이름 REGEXP ('책상|의자')

위 쿼리는 사무용품이름 컬럼에 '책상', '의자' 단일값을  갖는 인스턴스 뿐만 아니라, ('책상','모니터'), ('의자','컴퓨터'), ('책상','의자','컴퓨터') 와 같이 '책상'과 '의자' 값을 적어도 하나 이상 포함하는 다중값의 인스턴스 또한 추출한다.

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

Q. 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (LV. 2)

위 SQL 문제에서는 '통풍시트', '열선시트', '가죽시트' 이 세 옵션 중 적어도 하나 이상의 옵션을 포함한 자동차 종류별 개수를 구해야 한다.

가장 먼저, WHERE 조건절에서 REGEXP를 이용해 조건에 맞는 자동차의 종류를 필터한 후에,

집계함수 GROUP BY 와 COUNT를 이용해 자동차 종류의 개수를 세어 자동차 자동차 종류로 오름차순 정렬하여 쿼리를 마무리한다.

SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS REGEXP '통풍시트|열선시트|가죽시트'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;

실행 결과

댓글