
SQL 공부중 입니다. ✍✍✍
문제
https://school.programmers.co.kr/learn/courses/30/lessons/157340
풀이
이번 문제는 꽤 까다로워 다른 풀이를 참고하여 해결하였습니다. 저의 풀이, 아래와 같이 작성했을 시에는
SELECT CAR_ID, CASE
WHEN TIMESTAMPDIFF(DAY,START_DATE,"2022-10-16") >= 0 AND
TIMESTAMPDIFF(DAY,"2022-10-16",END_DATE) >= 0 THEN "대여중"
ELSE "대여 가능"
END AS "AVAILABILITY"
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

정답처럼 나오는 것 같지만
CAR_ID로 GROUP BY 하면서 자동으로 중복 제거되는 과정 중 문제에서 요구하는 기간이 아닌 기간으로 통합되어버렸습니다.

위 사진처럼 2022-10-27 ~ 2022-10-27 사이의 대여 가능여부는 필요없는 정보이므로 GROUP BY 전의 조건을 걸어주거나 아예 다른 접근 방법이 필요했습니다.🐼🐼🐼
그리하여 다른 풀이 중 아래와 같이
SELECT CAR_ID, CASE
WHEN SUM(IF("2022-10-16" BETWEEN START_DATE AND END_DATE,1,0)) > 0 THEN "대여중"
ELSE "대여 가능"
END AS "AVAILABILITY"
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
GROUP BY 하되 IF문으로 대여기간 안에 2022-10-16 날짜가 속한다면 1, 아니라면 0으로 지정한후 이 값들을 CAR_ID로 통합하여 합이 0 초과인지 여부로 해결하는 방식을 찾을 수 있었습니다. CASE-WHEN, IF, SUM() 구문 등이 결합되는 형태로 아이디어는 떠올랐지만 구현하는데 아직은 어려움있어 스스로 해결하지는 못한 문제였습니다.🐕🐕🐕

감사합니다.