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

2024. 4. 30. 23:04코딩 테스트

문제

 

 

개념
  •  DATEDIFF(시작일자, 종료일자) : 시작일자와 종료일자의 일 차이
    • DATEDIFF(DAY,...), DATEDIFF(MONTH,...), DATEDIFF(YEAR,...)
  • AVG() ... GROUP BY ... : 각 그룹의 평균
  • ROUND(값, 자리수) : 반올림하여 해당 소수점 자리까지 출력
    • -1 : 정수 첫째자리를 반올림
  • 당일 대여하여 당일 반납하여도 대여 기간이 1일이기 때문에 DATEDIFF에서 +1을 하였다.
  • HAVING과 WHERE의 차이
    • Having절은 WHERE절과 비슷하지만 그룹 전체 즉, 그룹을 나타내는 결과 집합의 행에만 적용된다
    • 반면 WHERE절은 개별 행에 적용이 된다.
    •  
    • having절은 그룹을 필터링하는 데 사용된다.
    • where절을 행을 필터링 하는데 사용된다.
    •  
    • having 절은 Group By 절 뒤에 사용합니다.
    • Where 절은 Group By 절 앞에 사용합니다.
    •  
    • 집계 함수는 having 절과 함께 사용할 수 있다.
    • where절을 have절에 포함된 하위 쿼리에 있지않으면 집계함수와 함께 사용할 수 없다.(집계함수란, COUNT, MIN, MAX, SUM, AVG등등이 있다.)
    •  
    • having은 SQL select문이 집계 값이 지정된 조건을 충족하는 행만 반환하도록 지정하는 SQL절이다.
    • where은 단일 테이블에서 데이터를 가져 오거나 여러 테이블과 결합하여 조건을 지정하는데 사용되는 SQL절이다.

 

정답
SELECT 
    CAR_ID, 
    ROUND(AVG(DATEDIFF(END_DATE,START_DATE) + 1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY 1
HAVING AVG(DATEDIFF(END_DATE,START_DATE) + 1) >= 7
ORDER BY 2 DESC, 1 DESC