CODEKATA SQL

COZY·2024년 5월 21일

CODEKATA

목록 보기
8/11
post-thumbnail

자동차 평균 대여 기간 구하기

✔️문제포인트
1. 평균 대여 기간이 7일 이상인 자동차만 자동차 ID출력
= 자동차 id 별 평균 대여 기간이 7일 이상
2 평균 대여기간 출력 (컬럼명 통일)
3 평균 대여기간 소수점 두번째 자리에서 반올림
4 평균 대여기간 기준 내림차순 정렬
5 기간 동일한 경우 자동차 ID기준 내림차순 정렬

💟풀이

SELECT car_id,
        round(avg(datediff(end_date,start_date)+1),1) 'AVERAGE_DURATION'
        #대여기간은 datediff를 통해 구해야 하고, 대여일수는 당일을 1일로 카운트 하기 때문에 +1을 해줌
        #이때 소숫점 2번째 자리에서 반올림 = 첫번째 자리까지 표시이므로, round함수를 사용함
        #컬럼을 추가하고, 이 컬럼의 이름을 AVERAGE_DURATION로 명명해주어야 함
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
having avg(datediff(end_date,start_date)+1)>=7
        #car_id당 평균 대여일을 구해야 하기 때문에
        -- group by가 적용된 상태에서 조건을 지정하는 having절을 사용해야 함.
        #평균을 구해야 하는데, 일수계산에서 당일은 1일로 취급하므로 +1을 해주어야 함.
order by AVERAGE_DURATION desc,
         car_id desc

➰사용한 기능

  1. avg()
    : 평균을 구하는 함수.
    avg(평균을 구할 값)의 형태로 작성한다.
    평균 = 해당 값/전체수 로 구해진다.

  2. round()
    : 값을 반올림 해주는 함수.
    round(반올림할 값, 표시할 자릿수) 형태로 작성한다.
    표시할 자릿수 = 반올림하고 남은 자릿수 = 반올림 할 자릿수 -1 로 생각하면 쉽다.

  3. having절
    : group으로 묶인 상태에서 조건을 적용하는 조건절.
    where문과 거의 동일하게 기능하지만,
    where문은 전체 테이블의 각각의 값에 대한 조건을 지정한다면,
    having절은 group by가 실행된 이후의 값들에 대한 조건을 지정한다.
    즉, ~~별 00조건이라는 문항이 있다면 having을 사용하는 것이 바람직하다.

  4. datediff()
    : 일수 차이를 계산해주는 함수
    datediff(기준날짜, 뺄 날짜)형식으로 작성한다.
    당일은 0으로 결괏값이 계산되기 때문에,
    당일을 1일로 취급하는 경우, 결괏값에 직접 1을 더하거나,
    사용할 조건에서 1일을 빼주어야 한다.
    평균을 구하는 경우, 출력될 실제 결괏값에 영향을 주기 때문에 값에 직접 1을 더해주는 방식을 선택해야 한다.

profile
데이터분석 공부하는 비전공자

0개의 댓글