정답쿼리
SELECT car_id, max(if('2022-10-16' between start_date and end_date, '대여중','대여 가능')) as AVAILABILITY
from car_rental_company_rental_history
group by car_id
order by car_id desc;
설명
2022-10-16일의 조건을 맞추는게 조금 까다로운 문제였다. 쿼리를 하나하나 쪼개서 살펴보겠다.
if('2022-10-16' between start_date and end_date, '대여중', '대여 가능')
if (조건문, 참일 때 반환하는 값, 거짓일 때 반환하는 값)
'2022-10-16'일이 start_date와 end_date 사이에 있으면, '대여중'을 반환하고, 그 사이에 없으면 '대여 가능'을 반환한다.
max(if('2022-10-16' between start_date and end_date, '대여중','대여 가능'))
group by car_id
max 함수는 group by와 함께 사용해야한다. group by를 통해 car_id를 기준으로 묶어주고, 위 조건을 max함수를 통해 반환하면, 같은 car_id 중에 가장 큰 값이 실행 결과로 나타난다.
근데, if 안에 있는 조건이 반환하는 값이 '대여중', '대여 가능'이기 때문에 이 중에 가장 큰 값? 조금 이상하다고 느껴질 수 있다. '대여중'은 사전준(알파벳순)으로 정렬할 때 '대여가능'보다 큰 것으로 간주되어 해당 차량의 대여 기록에 '대여중'이 있는 레코드가 하나라도 있으면 대여중'이 되고, 그렇지 않으면 '대여 가능'이 반환된다.
즉, MAX를 여기에서 사용하면, 최대 값을 찾는 것이 아니라 특정 날짜('2022-10-16')에 자동차를 사용할 수 있는지 또는 임대했는지 여부를 파악할 수 있다.
'코딩테스트 > SQL 코테' 카테고리의 다른 글
[프로그래머스 SQL]조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.08.08 |
---|---|
[프로그래머스 SQL] 오랜 기간 보호한 동물(2) (0) | 2023.08.07 |
[프로그래머스 SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.08.03 |
[프로그래머스 SQL] 자동차 평균 대여 기간 구하기 (1) | 2023.08.02 |
[프로그래머스 SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.07.27 |
댓글