문제 링크
개념
DATEDIFF
DATEDIFF 함수에 끝나는 날짜와 시작 날짜를 넣으면 두 날짜의 차를 계산해준다.
DATEDIFF(END_DATE, START_DATE)
하지만 위 DATEDIFF 함수는 말 그대로 날짜의 차를 계산해주는데, 문제를 보면 대여 당일도 포함하고 있어서 +1을 붙여줘야 한다.
DATEDIFF(END_DATE, START_DATE)+1ROUND
ROUND 함수를 사용하면 반올림해서 소수점 몇 번째 자리까지 나타낼지 정할 수 있다. 예를 들어 첫째 자리까지 나타낸다 한다면 소수점 둘째 자리에서 반올림 시켜준다.
ROUND(5/3,1)서브쿼리
서브쿼리를 활용하면 서브쿼리의 결과를 기반으로 데이터 필터링, 검색, 조작 등에 유용하게 사용할 수 있다. 형태는 SELECT, FROM, WHERE 등에 ()를 사용하여 그 안에 쿼리문을 작성하면 된다.
# WHERE절에 서브 쿼리를 사용한 예시
SELECT *
FROM TABLE_EXAMPLE1
WHERE MEM_ID IN (SELECT MEM_ID
FROM TABLE_EXAMPLE2
WHERE LOCATION = '부산');사실 HAVING을 사용하면 더 간단하게 작성 가능하다ㅎㅎ
제출 답안
SELECT T.CAR_ID, T.AVERAGE_DURATION
FROM (
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
) T
WHERE T.AVERAGE_DURATION >= 7
ORDER BY T.AVERAGE_DURATION DESC, T.CAR_ID DESC;# HAVING절을 사용했을 때의 답
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;Share article