Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- MVC
- 인증코드로 비밀번호 변경 구현
- 세션
- 코딩
- 오라클
- js
- Sts
- 고객센터 구현
- jsp
- Level 1
- ajax
- 교보문고 따라하기
- 이메일로 인증코드 전송 구현
- Spring MVC
- Oracle
- java
- jquery
- 프로그래머스
- 다중 카테고리 구현
- 로그인과 장바구니 구현
- 스프링
- 대분류/중분류/소분류
- 일단_해보는거야
- 자바
- MySQL
- json
- SESSION
- jsp 프로젝트
- jakarta.mail
- Spring
Archives
감 잃지말고 개발하기
[프로그래머스][Oracle][Level 3] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 본문
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블
Column name | Type | Nullable | Description |
HISTORY_ID | INTEGER | FALSE | 대여 기록 ID |
CAR_ID | INTEGER | FALSE | 자동차 ID |
START_DATE | DATE | FALSE | 대여 시작일 |
END_DATE | DATE | FALSE | 대여 종료일 |
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중'이라고 표시하고, 대여 중이지 않은 자동차의 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성하시오. 이때, 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시하고 결과는 자동차 ID를 기준으로 내림차순으로 정렬하시오.
접근방법
1. 자동차는 여러 번 대여할 수 있다.
→ CAR_ID는 중복될 수 있다.
2. 자동차를 대여 날짜 기간은 중복될 수 없다.
→ 하나의 자동차 기록에서 마지막으로 대여한 기록을 찾아 대여 유무를 판단한다.
3. 위 2번 사항에 해당되지 않는 모든 자동차는 '대여 가능'으로 표시한다.
해결
1. CAR_ID는 중복될 수 있다. & 자동차를 대여 날짜 기간은 중복될 수 없다.
→ 자동차 ID와 대여 시작/종료 컬럼을 GROUP BY한다..
→ 대여 시작일이 '2022-10-16' 이전이고 대여 종료일이 '2022-10-16' 이후를 만족하는 행을 찾는다.
2. 위 2번 사항에 해당되지 않는 모든 자동차는 '대여 가능'으로 표시한다.
→ CTE 및 UNION, GROUP BY 활용.
WITH AVAIL_CTE AS (
SELECT CAR_ID, '대여중' AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID, START_DATE, END_DATE
HAVING START_DATE <= TO_DATE('2022-10-16', 'YYYY-MM-DD')
AND END_DATE >= TO_DATE('2022-10-16', 'YYYY-MM-DD')
) SELECT * FROM AVAIL_CTE
UNION
SELECT CAR_ID, '대여 가능'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID NOT IN (SELECT CAR_ID FROM AVAIL_CTE)
ORDER BY 1 DESC
'프로그래머스 > Oracle' 카테고리의 다른 글
[프로그래머스] [Oracle] [Level 1] [INNER JOIN] 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2023.03.13 |
---|---|
[프로그래머스] [Oracle] [Level 1] 어린 동물 찾기 (0) | 2023.03.03 |
[프로그래머스] [Oracle] [Level 1] 조건에 맞는 회원 수 구하기 (0) | 2023.03.01 |
[프로그래머스] [Oracle] [Level 1] [COUNT] [DISTINCT] [중복 제거하기] COUNT() 와 COUNT([DISTINCT] expr) 차이 이해하기 (0) | 2023.02.28 |
[프로그래머스] [Oracle] [Level 2] [GROUP BY] 진료과별 총 예약 횟수 출력하기 (0) | 2022.12.29 |
[프로그래머스] [GROUP BY] [Level 2] 성분으로 구분한 아이스크림 총 주문량 출력하기 (0) | 2022.12.27 |