프로그래머스 풀이/Lv 2
프로그래머스 - 자동차 평균 대여 시간 구하기
홀든콜필드
2024. 2. 26. 22:23
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