🤷♀️ 문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
1) 평균 대여 기간 > 7일
2) 자동차ID(CAR_ID), 평균 대여 기간(AVERAGE_DURATION) 3) 평균 대여기간 ⇒ 소수점 2번째 자리에서 반올림 4) 평균 대여기간 → 내림차순, 자동차ID → 내림차순
ℹ️ 테이블
Column name Type Nullable
HISTORY_ID | INTEGER | FALSE |
CAR_ID | INTEGER | FALSE |
START_DATE | DATE | FALSE |
END_DATE | DATE | FALSE |
✅ 답안
1. MYSQL ver.
SELECT
CAR_ID
,AVERAGE_DURATION
FROM(
SELECT
CAR_ID
,ROUND(AVG(DATEDIFF(END_DATE,START_DATE) + 1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
) T1
WHERE 1=1
AND AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
;
2. ORACLE ver.
SELECT
CAR_ID
,AVERAGE_DURATION
FROM(
SELECT
CAR_ID
,ROUND(AVG((END_DATE - START_DATE) + 1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
) T1
WHERE 1=1
AND AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
;
🌟 CHECK POINT
- 소수점 반환
- 반올림
- 자릿수 생략하면 0으로 인식
- 자릿수 > 0 : 소수점 이하 자리
- 자릿수 < 0 : 소수점 이상 자리(정수 자리)
- 반올림 여부 = 음수 ⇒ 버림
- 반올림 여부 = 0 / 생략 ⇒ 반올림
- ROUND(값[, 반올림할 자릿수][,반올림 여부])
- 버림
- 자릿수 생략하면 0으로 인식
- 자릿수 > 0 : 소수점 이하 자리
- 자릿수 < 0 : 소수점 이상 자리(정수 자리)
- TRUNC(값[, 버림할 자릿수]) ⇒ ORACLE TRUNCATE(값[,버림할 자릿수]) ⇒ MYSQL
- 올림
- 정수로만 반환
- CEIL(값)
- 내림
- 정수로만 반환
- FLOOR(값)
- 반올림
'공부 > CodingTest' 카테고리의 다른 글
[프로그래머스/SQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.07.18 |
---|---|
[프로그래머스/SQL] 진료과별 총 예약 횟수 출력하기 (0) | 2023.07.18 |
[프로그래머스/SQL] 평균 일일 대여 요금 구하기 (0) | 2023.07.17 |
[프로그래머스/SQL] 자동차 대여 기록에서 장기/단기 대여 구분하기 (0) | 2023.07.16 |
[프로그래머스/SQL] 조건에 부합하는 중고거래 댓글 조회하기 (1) | 2023.07.16 |