미소를뿌리는감자의 코딩

[프로그래머스 2024/01/26] 자동차 평균 대여 기간 구하기 본문

코딩 테스트/프로그래머스

[프로그래머스 2024/01/26] 자동차 평균 대여 기간 구하기

미뿌감 2024. 1. 26. 22:47
728x90

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

 

프로그래머스

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

programmers.co.kr

 

1. 접근 방법

우선, DATEDIFF 함수를 이용해서, 대여기간을 구해주었다. 

SELECT CAR_ID, DATEDIFF(END_DATE, START_DATE)+1 as p from CAR_RENTAL_COMPANY_RENTAL_HISTORY

여기서 +1을 해주었다.

왜냐?!

2020-09-27이 start_date

2020-09-28이 end_date 라고 해보자.

DATEDIFF 함수에서는 1을 돌려줄 것이지만, 실제 대여기간은 2일이기 때문에, +1을 해주었다.

 

이후 CAR_ID로 묶어주었고, 

이를 다시 select 문에 넣고, average 가 7이상인 것들만 출력되도록 where문은 사용했다.

너무 코드가 select from 문이 많은 것 같기도 한데 

그래서 다시 적어보았다.

 

위 코드를 하나로 뭉쳐서 아래처럼 만들었다. +

HAVING : 그룹화된 결과에 대한 조건을 적용하고자 할 때 사용된다.

having 대신에 where을 사용한다면 error가 발생한다.

따라서, 그룹화된 이후 조건을 걸고 싶다면, having을 사용한다.

2. 코드

SELECT b.CAR_ID, round(b.average, 1) as AVERAGE_DURATION from (
   SELECT CAR_ID, avg(a.p) as average from (
       SELECT CAR_ID, DATEDIFF(END_DATE, START_DATE)+1 as p from 
           CAR_RENTAL_COMPANY_RENTAL_HISTORY) a
               group by CAR_ID) b
where b.average >=7
order by round(b.average, 1) desc, b.CAR_ID desc

 

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
HAVING AVERAGE_DURATION >=7
order by AVERAGE_DURATION desc, CAR_ID desc
728x90