저장을 습관화

프로그래머스 SQL GROUP BY LV.2 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 본문

코딩 테스트/프로그래머스 - SQL

프로그래머스 SQL GROUP BY LV.2 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

ctrs 2023. 12. 6. 23:03

프로그래머스 SQL GROUP BY LV.2 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제 명

프로그래머스 SQL GROUP BY LV.2 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기


2. 문제 설명

다음은 어느 자동차 대여 회사에서 대여중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블입니다. CAR_RENTAL_COMPANY_CAR 테이블은 아래와 같은 구조로 되어있으며, CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS 는 각각 자동차 ID, 자동차 종류, 일일 대여 요금(원), 자동차 옵션 리스트를 나타냅니다.

Column name Type Nullable
CAR_ID INTEGER FALSE
CAR_TYPE VARCHAR(255) FALSE
DAILY_FEE INTEGER FALSE
OPTIONS VARCHAR(255) FALSE

자동차 종류는 '세단', 'SUV', '승합차', '트럭', '리무진' 이 있습니다. 자동차 옵션 리스트는 콤마(',')로 구분된 키워드 리스트(옵션 리스트 값 예시: '열선시트', '스마트키', '주차감지센서')로 되어있으며, 키워드 종류는 '주차감지센서', '스마트키', '네비게이션', '통풍시트', '열선시트', '후방카메라', '가죽시트' 가 있습니다.


3. 문제

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


4. 예시

예를 들어 CAR_RENTAL_COMPANY_CAR 테이블이 다음과 같다면

CAR_ID CAR_TYPE DAILY_FEE OPTIONS
1 세단 16000 가죽시트,열선시트,후방카메라
2 SUV 14000 스마트키,네비게이션,열선시트
3 SUV 22000 주차감지센서,후방카메라
4 트럭 35000 주차감지센서,네비게이션,열선시트
5 SUV 16000 가죽시트,네비게이션,열선시트,후방카메라,주차감지센서

'통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차는 자동차 ID가 1, 2, 4, 5인 자동차이고, 자동차 종류 별로 몇 대인지 구하고 자동차 종류를 기준으로 오름차순 정렬하면 다음과 같은 결과가 나와야 합니다.

CAR_TYPE CARS
SUV 2
세단 1
트럭 1


5. 주의사항

없음

 

6. 기본 제공 코드

-- 코드를 입력하세요
SELECT

 

7. 제출한 내 답

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

 

8. 특이사항

IN 키워드는 OR 키워드를 여러번 쓴 것과 같은 역할을 한다.

하지만 이번과 같은 경우엔 IN 키워드를 사용하면 답이 나오지 않는다.

 

만약 OPTIONS 컬럼이 '통풍시트', '열선시트', '가죽시트' 와 같이 하나의 데이터 값만 들어가 있었다면

IN 키워드를 사용할 수도 있지만

이번 경우엔 '가죽시트, 열선시트, 후방카메라', '스마트키, 네비게이션, 열선시트'와 같이 

하나의 레코드에 긴 데이터 값이 있었기 때문에 OR키워드와 LIKE 키워드를 사용해서 특정 조건을 구해야만 했다.