프로그래머스 SQL 고득점 Kit
https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit
CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.
자동차 옵션 리스트는 콤마(',')로 구분된 키워드 리스트(옵션 리스트 값 예시: '열선시트', '스마트키', '주차감지센서')로 되어있다.
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%통풍시트%'
OR OPTIONS LIKE '%열선시트%'
OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
COUNT(*) AS CARS
ORDER BY CAR_TYPE ASC;
SELECT CAR_TYPE, COUNT(*) 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;
WHERE절에서 OPTIONS에 다중 조건을 넣기 위해 IN을 활용.
# 틀린 코드
SELECT CAR_TYPE, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS IN ('%통풍시트%', '%열선시트%', '%가죽시트%')
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;
🙅♂️ 안되는 이유
IN은 리스트 안의 정확한 값과 일치하는지 확인하는 구문.
따라서, %를 포함해서 부분 문자열을 검색하는 용도로는 작동하지 않는다!!
SELECT CAR_TYPE, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE FIND_IN_SET('통풍시트', OPTIONS) > 0
OR FIND_IN_SET('열선시트', OPTIONS) > 0
OR FIND_IN_SET('가죽시트', OPTIONS) > 0
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;