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(컬럼명, '패턴') 형식을 사용한다
- 이는 코드의 가독성을 높이고 조건이 늘어나더라도 쿼리를 효율적으로 관리할 수 있음을 배웠다

'코딩테스트' 카테고리의 다른 글
| [26.04.20 코테/회고(MySQL)]-Python 개발자 찾기 (0) | 2026.04.20 |
|---|---|
| [26.04.17 코테/회고(MySQL)]-한 해에 잡은 물고기 수 구하기 (1) | 2026.04.17 |
| [26.04.14 코테/회고(MySQL/Oracle)]-조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2026.04.14 |
| [26.04.13 코테/회고(MySQL)-성분으로 구분한 아이스크림 총 주문량 (1) | 2026.04.13 |
| [26.04.10 코테/회고(MySQL)]-고양이와 개는 몇 마리 있을까 (0) | 2026.04.10 |