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

2023. 1. 19. 19:59SQL/MYSQL

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

 

1. 나의 답

SELECT CAR_TYPE, count(CAR_ID) as CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS REGEXP ('통풍시트|열선시트|가죽시트')
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

 

2. 왜이렇게 생각했나

SELECT CAR_TYPE, count(CAR_ID) as CARS
FROM CAR_RENTAL_COMPANY_CAR

 자동차 종류별로 몇대인지 출력하는 SQL문을 작성해야하기 때문에 CAR_TYPE과 CAR_ID에 count함수를 활용하여 종류별 대 수를 알 수 있는 CARS 컬럼을 선택하였다.

 테이블은 하나이기때문에 다른 선택지는 없었다.

WHERE OPTIONS REGEXP ('통풍시트|열선시트|가죽시트')
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

 CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차를 골라야하기 때문에 WHERE에 REGEXP를 활용하여 각 시트들을 넣어주었다.

 종류별 개수를 확인해야 하기 때문에 GROUP BY를 활용하여 종류별로 묶어주고 오름차순으로 정렬하였다.

 

3. 만난 오류

WHERE OPTIONS REGEXP ('통풍시트|열선시트|가죽시트')

 문제에 옵션 3개 중 하나라도 포함되어있는 것이라고 하여서 처음엔 LIKE에 IN을 붙이면 될거라 생각했으나 생각처럼 되지 않았다. 그렇다고 IN만 사용하여 작성하니 나오는게 없었다.

 OPTIONS 컬럼이 저렇게 생겼기 때문이었다. 결국 LIKE를 활용해야하는데 방법이 없을까 찾아보다가 다행스럽게도 LIKE에 IN을 넣은 듯한 REGEXP를 만나게 되었다. 이는 따로 차자아보고 포스팅을 해봐야겠다.