프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
1. 대여중 / 대여 가능 분류하기
SQL에서 기준에 따라 분류하는 방법은 여러가지가 있다.
그 중 나는 이전에 사용했던 CASE 구문을 사용했다.
2024.08.07 - [연습장/SQL] - [프로그래머스] Lv.3 대장균 크기에 따라 분류하기 1 (MySQL)
SELECT CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
ELSE '대여 가능'
END AVAILABILITY
START_DATE와 END_DATE의 사이에 2022년 10월 16일이 포함되는지 확인하기 위해 BETWEEN() 함수를 사용한다.
BETWEEN()의 경우 '이상 이하' 의 결과를 출력한다.
쉽게 말해
SELECT CASE WHEN START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16' THEN '대여중'
ELSE '대여 가능'
END) AVAILABILITY
이렇게 표현할 수 있는 것이다.
MySQL :: MySQL 8.4 Reference Manual :: 14.4.2 Comparison Functions and Operators
14.4.2 Comparison Functions and Operators Table 14.4 Comparison Operators Name Description > Greater than operator >= Greater than or equal operator < Less than operator <>, != Not equal operator <= Less than or equal operator <=> NULL-safe equal to ope
dev.mysql.com
2. 중복 ID 제거하기
데이터프레임을 보면, 같은 ID를 가진 차량이 여러차례 대여했던 기록을 확인할 수 있다.

이 경우 가장 최신의 대여 기록만 필요하기 때문에, MAX() 함수를 사용해서 가장 최근 대여 기록만 골라낼 수 있도록 처리했다.
MySQL :: MySQL 8.4 Reference Manual :: 14.19.1 Aggregate Function Descriptions
MySQL 8.4 Reference Manual / ... / Functions and Operators / Aggregate Functions / Aggregate Function Descriptions 14.19.1 Aggregate Function Descriptions This section describes aggregate functions that operate on sets of values. They are
dev.mysql.com
SELECT MAX(CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
ELSE '대여 가능'
END) AVAILABILITY
3. 전체 코드
SELECT CAR_ID
,MAX(CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
ELSE '대여 가능'
END) AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
'연습장 > SQL' 카테고리의 다른 글
[프로그래머스] Lv3. 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 (MySQL) (0) | 2024.08.15 |
---|---|
[프로그래머스] Lv3. 대장균들의 자식의 수 구하기 (MySQL) (0) | 2024.08.14 |
[프로그래머스] Lv.3 대장균 크기에 따라 분류하기 1 (MySQL) (0) | 2024.08.09 |
[프로그래머스] Lv.3 부서별 평균 연봉 조회하기 (MySQL) (0) | 2024.08.08 |
[프로그래머스] Lv.3 조건에 맞는 사용자 정보 조회하기 (MySQL) (0) | 2024.08.07 |
댓글