본문 바로가기

하루 30분 SQL 공부하기

[MySQL] 프로그래머스 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/151137

 

프로그래머스

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

programmers.co.kr

 

문제 분석

난이도 : level 2

 

문제 요구사항:

CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.

 

 

문제 풀이

GROUP BY를 사용해서 CAR_TYPE별로 묶기

1. LIKE를 사용

SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE 
ORDER BY CAR_TYPE

 

2. INSTR를 사용

INSTR를 사용해서 특정 문자열이 들어있는지 확인하는 방법이다. 

INSTR함수는 특정 문자열이 다른 문자열 안에서 어디에 위치해 있는지를 나타내는 함수입니다. 문자열이 존재하지 않으면 0을 반환하고, 존재하면 그 문자열이 시작되는 위치(1부터 시작)를 반환한다.

SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WEHRE
INSTR(OPTIONS, '통풍시트') > 0 OR
INSTR(OPTIONS, '열선시트') > 0 OR
INSTR(OPTIONS, '가죽시트') > 0 
GROUP BY CAR_TYPE 
ORDER BY CAR_TYPE

 

3. REGEXP를 사용

REGEXP 함수는 SQL에서 정규 표현식(Regular Expression)을 사용하여 문자열 패턴을 검색하는 함수이다. INSTR처럼 단순히 특정 문자열을 찾는 것보다 더 복잡한 패턴을 사용할 수 있다는 장점이 있다. 주로 패턴 매칭이나 특정 규칙을 따르는 문자열을 찾고자 할 때 유용하다. 

ex) OPTIONS REGEXP '[0-9]{3}'는 OPTIONS 열에서 3자리 숫자가 포함된 항목을 찾으라는 의미. 

 

INSTR와의 차이점

 

  • INSTR는 단순히 문자열이 존재하는지 확인할 때 빠르고 간단하다.
  • REGEXP는 좀 더 복잡한 패턴을 검사할 수 있지만, 성능이 상대적으로 느릴 수 있다. 복잡한 패턴일수록 성능에 더 많은 영향을 미친다.

 

SELECT CAR_TYPE, COUNTCAR_TYPE AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE 
OPTIONS REGEXP '통풍시트|열선시트|가죽시트'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE