SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_자동차 평균 대여 기간 구하기

몽총한몽이네 2024. 2. 22. 00:45
반응형

SELECT CAR_ID, ROUND(AVG(datediff(END_DATE,START_DATE)+1),1)AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
where 1=1
GROUP BY 1
HAVING AVERAGE_DURATION >= 7
ORDER BY 2 desc,1 desc

 

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 아래와 같은 구조로 되어있으며, HISTORY_ID, CAR_ID, START_DATE, END_DATE 는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냄

 

문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬

 

어렵지 않은 문제이다. datediff 함수를 알고 있어야 하며 대여일의 경우 당일도 포함하기때문에 날짜를 차등할경우 +1 하여 맞추어 주어야 한다는점. 그리고 ROUND 함수로 자릿수를 맞추어주면 된다는점. 그리고 SELECT 절에서 완성된 조건들은 HAVING 절에서 필터링 마무리 해주면 된다는 점이다.

 

하다가 신텍스 오류가 나서 뭔가하면서 골싸맸는데 실수로 HAVING 절을 ORDER 절 밑에 넣어서 이상하게 다른걸 건드리다 문제푸는데 5분 이상이 걸려 버렸다... 풀어본 덕분에 실전에선 실수 없이 할 수 있을 듯 하다.

반응형