[프로그래머스] SQL/오답 노트

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

SH3542 2024. 10. 9. 20:50

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


날짜를 비교를 위해, 코테에서 사용하는 방법을 떠올렸다.

total = (Y * 365) + (M * 29~31[배열 필요]) + D

 

DATE TO NUMBER를 위해, 무작정 CAST()를 떠올렸다. 그래서 오답이었다.

 

1. CAST()

CAST('2022-10-1' TO INTEGER) // 에러

CAST('2022-10-1' TO UNSIGNED/SIGNED [INTEGER]) // 2022

CAST('1000-01-03' TO UNSIGNED/SIGNED [INTEGER]) // 1000

 

오답을 받아 SELECT로 조회하니, 이는 의도하는 형변환이 아니었다. 문자 '-'를 만나기 전의 유효숫자에 대한 형변환을 수행하는 듯 했다.

 

이후 키워드로 찾아보니, TO_DAYS()가 있었다. DATEDIFF(End, Start) 형식의 자체 비교 함수도 제공했다.

 

2.

DATE DIFF의 기준은 E-S가 아닌, E-S+1이었다. 바보

 

오답

SELECT CAR_ID, ROUND(AVG(CAST(END_DATE AS UNSIGNED) - CAST(START_DATE AS UNSIGNED)), 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(DATEDIFF(END_DATE, START_DATE) + 1), 1) AVERAGE_DURATION
# SELECT CAR_ID, ROUND(AVG(TO_DAYS(END_DATE) - TO_DAYS(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