프로그래머스 SQL 고득점 Kit - 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

Jinyoung Cheon·2024년 12월 21일
0

코딩테스트

목록 보기
6/25

프로그래머스 SQL 고득점 Kit
https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit

GROUP BY

problem

CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.
자동차 옵션 리스트는 콤마(',')로 구분된 키워드 리스트(옵션 리스트 값 예시: '열선시트', '스마트키', '주차감지센서')로 되어있다.

task

  1. CAR_RENTAL_COMPANY_CAR 테이블에서
FROM CAR_RENTAL_COMPANY_CAR
  1. '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가
    -> 조건절에 OPTIONS에 OR을 통해 세가지 옵션을 넣을 생각
WHERE OPTIONS LIKE '%통풍시트%'
   OR OPTIONS LIKE '%열선시트%'
   OR OPTIONS LIKE '%가죽시트%'
  1. 자동차 종류 별로
    -> '자동차 종류 별로' GROUP BY 생각
GROUP BY CAR_TYPE
  1. 몇 대인지 출력. 자동차 수에 대한 컬럼명은 CARS로 지정.
    -> 집계함수 COUNT() 생각
COUNT(*) AS CARS
  1. 결과는 자동차 종류를 기준으로 오름차순 정렬
ORDER BY CAR_TYPE ASC;
  1. 자동차 옵션 리스트는 콤마(',')로 구분된 키워드 리스트(옵션 리스트 값 예시: '열선시트', '스마트키', '주차감지센서')로 되어있다.
    -> 콤마(',')로 구분. -> 문자열 분리 생각

code

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;

note

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은 리스트 안의 정확한 값과 일치하는지 확인하는 구문.
따라서, %를 포함해서 부분 문자열을 검색하는 용도로는 작동하지 않는다!!

Then?

  • FIND_IN_SET 활용
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;
profile
데이터를 향해, 한 걸음씩 천천히.

0개의 댓글