상세 컨텐츠

본문 제목

프로그래머스 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (Mysql)

programmers/sql

by nownow 2024. 2. 13. 03:03

본문

MySQL 풀이.

틀렸던 코드

SELECT
CAR_ID,
IF("2022-10-16" BETWEEN START_DATE AND END_DATE,"대여중","대여 가능")
FROM 
CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY
CAR_ID
ORDER BY 1 DESC

CAR_ID 기준으로 묶었기에 이렇게 하면 START_DATE랑 END_DATE가

다른 CAR_ID 마다 그냥 맨위 행에있는거 가져와서 쓰기때문에

정확한 답이 될 수 없었음.

 

정답코드 1

SELECT
CAR_ID,
MAX(IF("2022-10-16" BETWEEN START_DATE AND END_DATE,"대여중","대여 가능"))
FROM 
CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY
CAR_ID
ORDER BY 1 DESC

집계함수 MAX 사용. CAR_ID의 날짜 모두 비교해봐서 해당 조건에 맞는 대여중이 하나라도 있다면 대여중 표시 하도록

MAX를 사용했다. 세번째 글자가 '중'과 ' ' 였기에 MAX 사용시 사전순으로 중이 더 크기때문에 가능한 풀이.

 

정답코드 2

SELECT
CAR_ID,
IF(CAR_ID IN (
SELECT 
CAR_ID
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 
"2022-10-16" BETWEEN START_DATE AND END_DATE
),"대여중","대여 가능")
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY 1 DESC

조금더 일반적인 방식이다.

 

GROUP BY 와 함께 SELECT에 집계함수 아닌 함수 쓸때 실수 유의.

관련글 더보기