코딩테스트

[26.04.15 코테/회고(MySQL/Oracle)]-자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

지니248 2026. 4. 15. 17:10

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

링크: https://school.programmers.co.kr/learn/courses/30/lessons/151137?language=mysql

 

내가 작성한 코드

-- 풀이1 (LIKE 연산자)
SELECT CAR_TYPE, COUNT(CAR_ID) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%통풍시트%'
   OR OPTIONS LIKE '%열선시트%'
   OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;

-- 풀이2 (정규표현식)
SELECT CAR_TYPE, COUNT(CAR_ID) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS REGEXP '통풍시트|열선시트|가죽시트'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;

 

Oracle

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

 

문제 회고

1. IN 연산자 사용 불가

- 처음에 IN을 사용하여 풀었을 때 CARS가 0이 나오는 오류가 발생했다 (↓ 사진1 참조)

- IN 방식은 OPTIONS 값이 정확히 '통풍시트' 딱 하나만 있을 때 찾아낸다. 따라서 문제에서 요구하는

  하나 이상의 옵션을 찾을 때에는 사용할 수 없다

2.  LIKE 연산자 사용

- 특정 단어가 포함되었는지 확인하기 위해 LIKE '%단어%' 방식을 사용했다

- OPTIONS 값 중 하나라도 포함된 차를 찾아야 하므로 각각의 조건에 대해 OR 연산자를 연결하여 필터링을 수행했다

3. 정규표현식

- 정규표현식을 사용하면 더 간결하게 표현할 수 있다

- | 는 OR을 의미하므로 OPTIONS REGEXP '통풍시트|열선시트|가죽시트' 와 같이 작성하여

  세 가지 중 하나라도 포함된 행을 한 번에 필터링했다

   - Oracle은 REGEXP_LIKE(컬럼명, '패턴') 형식을 사용한다

- 이는 코드의 가독성을 높이고 조건이 늘어나더라도 쿼리를 효율적으로 관리할 수 있음을 배웠다

사진1) IN 오류