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
'[프로그래머스] SQL > 오답 노트' 카테고리의 다른 글
[lv3] 조건에 맞는 개발자 찾기 (0) | 2024.10.18 |
---|---|
[lv3] 대장균의 크기에 따라 분류하기 2 (0) | 2024.10.18 |
[lv3] 업그레이드 할 수 없는 아이템 구하기 (1) | 2024.10.05 |
[lv2] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2024.10.05 |
[lv3] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (1) | 2024.10.05 |