본문 바로가기
SQL/코딩테스트

[프로그래머스 / MySQL] 평균 일일 대여 요금 구하기

by Hi_heidi 2024. 2. 2.

문제

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

 

테이블 형태

테이블 / 출력 결과 예시

 

풀이

SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE LIKE 'SUV'

 

해설

WHERE CAR_TYPE LIKE 'SUV'
  • WHERE문에 LIKE를 활용해 자동차 종류가 SUV인 자동차를 필터링한다. CAR_TYPE='SUV'도 가능한데 당시 LIKE를 안 지 얼마 안돼 사용해보고 싶어 LIKE를 썼다
SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
  • AVG로 DAILY_FEE의 평균 값을 산출하고 반올림하는 함수 ROUND 를 사용해 최종 평균 대여료를 소수 첫 번째 자리에서 반올림해 정수로 나타냈다. ROUND(숫자, 반올림해서 나타낼 자릿수)로 사용되는데 자릿수를 지정하지 않으면 자동으로 정수 형태를 반환한다.
ROUND(X,D)

- Rounds the argument X to D decimal places 인수X를 소수점 D자리까지 나타낸다
- D defaults to 0 if not specified D가 지정되지 않으면 기본 값은 0이다(=소수점 0자리=정수 형태)
- D can be negative to cause D digits left of the decimal point of the value X to become zero 
D가 음수인 경우 소수점 왼쪽에 있는 자릿수가 반올림 대상이 된다(ex. -1은 일의 자리 수 기준으로 반올림하고 0으로, -2는 십의 자리 수 기준 반올림하고 0으로..) 밑에서 2번째 코드 예시 참고
- The maximum absolute value for D is 30; any digits in excess of 30 (or -30) are truncated
D의 최대 절대값은 30이며 30을 초과하는 모든 숫자는 잘린다(=최대 30번째 자릿수까지만 나타낸다)
- If X or D is NULL, the function returns NULL
인수X가 없거나 D가 NULL이면 NULL을 반환한다

mysql> SELECT ROUND(-1.23);
        -> -1
mysql> SELECT ROUND(-1.58);
        -> -2
mysql> SELECT ROUND(1.58);
        -> 2
mysql> SELECT ROUND(1.298, 1);
        -> 1.3
mysql> SELECT ROUND(1.298, 0);
        -> 1
mysql> SELECT ROUND(23.298, -1);
        -> 20
mysql> SELECT ROUND(.12345678901234567890123456789012345, 35);
        -> 0.123456789012345678901234567890
 

MySQL :: MySQL 8.3 Reference Manual :: 14.6.2 Mathematical Functions

MySQL 8.3 Reference Manual  /  ...  /  Functions and Operators  /  Numeric Functions and Operators  /  Mathematical Functions 14.6.2 Mathematical Functions Table 14.10 Mathematical Functions Name Description ABS() Return the absolute value ACOS(

dev.mysql.com