본문 바로가기

TIL

[231218] SQL: 코드카타 55~59

1) 어떤 문제가 있었나

SQL 코드카타 59번 문제에서 특정 날짜에 자동차 대여 상태를 표시한 후 이를 자동차ID별로 출력해야 했는데,

특정일자 이전의 대여 기록을 거르고 대여중인 상태가 우선순위가 되도록 출력할 방법을 잡지 못함  

 

2) 내가 시도해본 건 무엇인가

WHERE 절과 GROUP BY에 출력 조건을 제한해보려 했지만, 오답으로 체크됨 

 

3) 어떻게 해결했나

다른 사람 쿼리문을 통해 대여시작/종료 일자 내 특정일자 포함되면 1(대여중)로, 반대는 0(대여가능)으로 치환

> MAX값을 통해 대여중 상태가 우선순위를 갖도록 하는 방법을 알게 됨 

 

--- 내가 쓴 쿼리문 --- 

SELECT car_id, 
       IF(SUM(RENTAL)=0, '대여 가능', '대여중') AVAILABILITY
FROM (
SELECT *,
if(DATE('2022-10-16') BETWEEN DATE(start_date) AND DATE(end_date), 1, 0) RENTAL
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
)A
GROUP BY 1
ORDER BY 1 DESC

 

4) 무엇을 새롭게 알았나

- SQL에서 단순히 GROUP BY만 넣으면 원하는 데이터가 나오지 않으므로, 데이터 종류에 따라 이를 숫자 정보로 치환하여 SUM, MIN, MAX 등 값을 활용하여 원하는 값만 출력할 수 있음 

- UNION 수식을 활용한 해결 방법에 대해서는 추가로 공부 필요