본문 바로가기

프로그래머스 풀이/Lv 2

프로그래머스 - 자동차 평균 대여 시간 구하기

728x90

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

 

프로그래머스

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

programmers.co.kr

 

SQL 문제는 가끔 기업 코딩테스트에서도 출제되고 실제로 백엔드 개발자라면 쿼리 작성할 일이 반드시 생기기 때문에 공부하기로 했다.

 

* 주요 날짜 관련 함수 *

  • DATE_ADD() : 날짜, 시간 더하기
  • DATE_SUB() : 날짜, 시간 빼기
  • DATEDIFF() : 두 기간 사이의 일수 계산
  • TIMEDIFF() : 두 기간 사이의 시간 계산
  • PERIOD_DIFF() : 두 기간 사이의 개월 수 계산
  • TIMESTAMPDIFF() : 두 기간 사이의 시간 계산

여기서 사용해야하는 함수는 DATEDIFF 이다. 31일 20일 이라면 11이 출력된다. 두 날짜를 모두 포함하는 날짜 수를 새려면 + 1을 해야한다.

 

그리고 이 문제처럼 무언가 하나의 기준을 잡고 그 하나의 기준끼리 연산해야한다면 GROUPBY를 사용해야한다. 그룹바이는 한 그룹으로 묶어 그것을 연산하는 식으로 사용된다. 이 문제에서는 평균이 사용되었다. 

SUM, AVG, MIN, MAX, COUNT 가 있다. 이 문제에서는 AVG가 사용된다.

 

그리고 HAVING 절을 사용하여 WHERE처럼 사용하여 조건을 만족시킨다. 

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 AVG(DATEDIFF(END_DATE, START_DATE) + 1) >= 7 
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC