반응형
※ 문제
※ 코드
/*
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
*/
SELECT CAR_ID, ROUND(AVG(DURATION), 1) AVERAGE_DURATION
FROM (SELECT CAR_ID, DATEDIFF(END_DATE, START_DATE)+1 DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY) NEW_TB
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
※ 풀이
위는 SUB QEURY 없이 푸는 방법, 아래는 SUB QEURY를 사용하여 푸는 방법입니다.
지금 문제는 간단하기도 하고, 효율성을 생각하면 위 코드가 좋겠지만... 조금 더 복잡해지면 약간의 효율성을 포기하고 아래처럼 인간 친화적으로 작성하는 게 더 좋지 않을까 싶습니다.
그리고 HAVING 조건절에서 ROUND 처리가 안 되면 정답이 틀리다고 나옵니다. 아마 6.95~6.99 사이의 실수값 때문이라고 생각되네요. (ROUND를 하라는 게 문제의 조건이고 6.95~6.99는 반올림 시 7일이므로 출력이 되어야 하는 CAR_ID 입니다!)
아무튼 이 문제의 포인트는 DATEDIFF 함수를 통해 대여시작~대여종료까지의 날짜를 일 단위로 구해주는 것입니다.
그리고 대여 당일부터 1일로 치기 때문에(즉, 당일대여는 대여기간 = 1일) DATEDIFF의 결과값에 +1을 해주어야 합니다.
반응형
'DBMS' 카테고리의 다른 글
[프로그래머스 SQL] Lv. 2 노선별 평균 역 사이 거리 조회하기 (0) | 2025.06.15 |
---|---|
[프로그래머스 SQL] Lv. 2 조건에 부합하는 중고거래 상태 조회하기 (0) | 2025.06.15 |
[프로그래머스 SQL] Lv. 2 월별 잡은 물고기 수 구하기 (0) | 2025.06.14 |
[프로그래머스 SQL] Lv. 2 물고기 종류 별 잡은 수 구하기 (0) | 2025.06.13 |
[프로그래머스 SQL] Lv. 2 루시와 엘라 찾기 (0) | 2025.06.13 |