[프로그래머스SQL]자동차 평균 대여 기간 구하기

Oni·2023년 10월 15일
0

SQL 코딩테스트

목록 보기
1/2

문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.


-- SOL 1:subquery 활용
SELECT *
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
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC )
WHERE AVERAGE_DURATION>=7
-- SOL 2:having절 사용
-- POINT) SELECT절에서 생성한 컬럼을 GROUP BY, WHERE, HAVING절에서 쓸 수 없는 이유
-- : 실행순서가 WHERE > GROUP BY > HAVING > SELECT 순이기 때문
SELECT 
    CAR_ID
    , ROUND(AVG(END_DATE-START_DATE+1),1) DIFF
FROM 
    CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY 
    CAR_ID
HAVING 
    ROUND(AVG(END_DATE-START_DATE+1),1) >= 7
ORDER BY 2 DESC, 1 DESC 
-- SOL 3. CTE를 활용해 가독성을 높인 코드
WITH T_A AS (
SELECT CAR_ID, ROUND(AVG(END_DATE-START_DATE+1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC 
)

SELECT *
FROM T_A
WHERE AVERAGE_DURATION>=7
  • 소수점 두번째 자리에서 반올림:ROUND([날짜],1)
profile
데이터 분석/엔지니어링/ML에 관한 기록

0개의 댓글