SQL/프로그래머스 SQL

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

진리뷰 2023. 11. 1. 09:00
반응형

 

 

MySQL-프로그래머스-자동차-종류-별-특정-옵션이-포함된-자동차-수-구하기-문제-답-썸네일
자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

 

 

이 글은 프로그래머스 SQL 고득점 Kit 문제와 답을 정리한 글입니다.

*MySQL 버전입니다.

 

 

 

자동차 종류별 특정 옵션이 포함된 자동차 수 구하기 문제

 

💡 자동차 종류, 종류별 대 수 출력하기

  • 자동차 옵션: 통풍시트/열선시트/가죽시트 중 하나 이상 포함해야 함
  • 자동차 종류 오름차순

 

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

 

 

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

 

 

 

자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 답

 

💡 문제 포인트: 자동차의 특정 옵션 키워드 필터링하기

select CAR_TYPE
, count(car_id) as CARS

from CAR_RENTAL_COMPANY_CAR

where options regexp('열선시트|통풍시트|가죽시트')

group by CAR_TYPE
order by CAR_TYPE;

 


 

단순하게 생각하면 LIKE OR을 사용할 수 있으나, 쿼리가 너무 길어진다.

또한 OR보다 IN이 더 효율적이다. 하지만 where절에 IN을 사용하면, 정확한 값을 출력하지 못한다.

 

이럴 때, 여러 개를 동시 검색할 수 있는 REGEXP를 사용하면 된다.

REGEXP는 마치 LIKE와 IN 합체 버전 같다.

LIKE로 여러 개를 검색하면 LIKE OR을 여러 번 쓰게 되는 비효율이 발생하기에, REGEXP로 처리한다.

*추천 글 MySQL LIKE 여러 개 검색(LIKE IN), REGEXP 사용 방법

 

그 결과 options 컬럼에서 '열선시트', '통풍시트', '가죽시트'라는 각각의 문자가 있는 로우는 모두 선택된다.

따라서 문제의 조건이 요구하는 '세 옵션 중 하나 이상의 옵션이 포함된 자동차'를 찾을 수 있다.

 

 

 

추가 정리

 

IN 관련 쿼리

select CAR_TYPE
, count(car_id) as CARS
       
from car_rental_company_car

where options in('열선시트', '통풍시트', '가죽시트')

group by car_type
order by car_type;

 

IN을 사용해서 위 쿼리와 같이 작성하면 결괏값이 제대로 안 나온다.

열선시트를 예로 들어 생각해 보자.

IN('열선시트', '통풍시트', '가죽시트')로 작성하면 , options 컬럼에서 오직 '열선시트'만 입력된 로우를 찾는다.

통풍시트, 가죽시트도 마찬가지이다. 통풍시트만 입력된, 가죽시트만 입력된 로우를 찾는다.

 

하지만 찾으려는 데이터는 세 옵션 중 하나 이상 갖춘 자동차이다.

그러므로 열선시트+@ 옵션들이 입력된 자동차도 선택해야 하는데, 이렇게 in을 사용하면 잘못된 데이터를 찾는다.

또한 원 데이터 확인 시, 열선시트만 입력된 로우는 없고 열선시트+@로 입력되어 있다.

이런 이유들로 인해, IN 사용 시 결괏값이 제대로 안 나온다.

반응형
top