관리 메뉴

Rootable의 개발일기

프로그래머스 SQL 풀이 - 평균 일일 대여 요금 구하기 본문

프로그래머스 - SQL Kit

프로그래머스 SQL 풀이 - 평균 일일 대여 요금 구하기

dev-rootable 2023. 5. 19. 20:01

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

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

 

출처 : 프로그래머스

 

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

 

문제

CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요.

 

풀이

1. 평균 요금을 구하기 위해 집계 함수인 AVG() 를 사용한다.

 

2. 반올림을 위해 ROUND() 함수를 사용하는데, 소수 첫 번째 자리에서 반올림하면 정수를 반환하라는 의미이므로 소수점 자릿수는 적지 않아도 된다.

 

3. 컬럼명을 지정하라고 했으므로 AS(alias) 를 사용해야 한다.

 

4. 자동차 종류 별로 요금 책정 방식이 다르기 때문에 GROUP BY 컬럼으로 car_type 을 준다.

 

5. 마지막으로, SUV 타입인 자동차 종류로 지정해야 하는데, 여기서 WHERE 을 사용하면 안된다. 그 이유는 WHERE 은 GROUP BY 보다 먼저 SQL 에서 읽게 되는데, 이렇게 되면 필터링된 결과를 그룹핑하게 되므로 기대치 않은 결과를 얻게 된다. 따라서, GROUP BY 와 함께 사용되는 HAVING 을 써야 한다.

 

정답 코드

SELECT ROUND(AVG(daily_fee)) as AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
GROUP BY car_type
HAVING car_type = 'SUV'

 

SELECT ROUND(AVG(daily_fee)) as AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE car_type = 'SUV'