728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/157339
- 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중
- 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고
- 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서
- 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문 작성하기
- 대여 금액 기준 내림차순, 대여 금액이 같은 경우 자동차 종류 기준 오름차순, 자동차 종류까지 같은 경우 자동차 ID 기준 내림차순 정렬
테이블
CAR_RENTAL_COMPANY_CAR | |
CAR_RENTAL_COMPANY_RENTAL_HISTORY | |
CAR_RENTAL_COMPANY_DISCOUNT_PLAN |
풀이과정
# '2022-11-01' 부터 '2022-11-30' 까지 대여가 불가능한 자동차만 필터링
- 대여 시작일(START_DATE)이 '2022-11-01' 이전
- 2022년 11월 01일 이전에 대여한 기록이 있는 모든 행들
- 대여 반납일(END_DATE)이 '2022-11-01' 이후
- 2022년 11월 01일 이후에 반납한 기록이 있는 모든 행들
- 즉, 자동차 중 2022년 11월 01일 이전에 대여를 해갔는데, 11월 01일 이후에나 반납이 되는 자동차는
2022년 11월 01일부터 11월 30일까지 빌리려는 고객에게 대여가 불가능함
1 2 3 4 5 6 7 8 | SELECT * FROM CAR_RENTAL_COMPANY_CAR CC LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY RH ON CC.CAR_ID = RH.CAR_ID AND RH.START_DATE < '2022-11-01' AND RH.END_DATE >= '2022-11-01' | cs |
# 문제 조건에 맞게 '2022-11-01'부터 '2022-11-30'까지 대여가 가능한 자동차만 필터링 하기
- 자동차 정보 테이블 + 자동차 대여 기록 테이블 + 자동차 대여기간 별 할인율 테이블 모두 조인
- 문제 조건에 따라 '30일 이상' 대여할 경우의 할인율을 자동차 종류('세단', 'SUV')에 따라 적용 후 FEE 계산
- WHERE 조건에서 대여 기록이 없는 자동차 (즉, 11월 01부터 11월 30일까지 대여 가능한 자동차) 필터링하기
- 자동차 종류는 '세단' 또는 'SUV'일 것
- FEE는 50만원에서 200만원 사이일 것
- 마지막으로 정렬기준까지 주면 끝!
# 정답
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT CC.CAR_ID, CC.CAR_TYPE, ROUND(CC.DAILY_FEE * (1 - DP.DISCOUNT_RATE*0.01) * 30, 0) AS FEE FROM CAR_RENTAL_COMPANY_CAR CC LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY RH ON CC.CAR_ID = RH.CAR_ID AND RH.START_DATE < '2022-11-01' AND RH.END_DATE >= '2022-11-01' JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN DP ON CC.CAR_TYPE = DP.CAR_TYPE AND DP.DURATION_TYPE LIKE '30%' WHERE CC.CAR_TYPE IN ('세단', 'SUV') AND RH.HISTORY_ID IS NULL -- 2022년 11월 1일부터 11월 30일 사이에 대여 이력이 없는 자동차만 선택 HAVING FEE BETWEEN 500000 AND 2000000 ORDER BY FEE DESC, CC.CAR_TYPE ASC, CC.CAR_ID DESC; | cs |
728x90
'코딩테스트 > SQL 코드카타' 카테고리의 다른 글
MySQL 프로그래머스 | 그룹별 조건에 맞는 식당 목록 출력하기 (1) | 2024.09.18 |
---|---|
MySQL 프로그래머스 | 자동차 대여 기록 별 대여 금액 구하기 (ON과 WHERE절 차이) (2) | 2024.09.17 |
MySQL 프로그래머스 | 자동차 평균 대여 기간 구하기 (DATEDIFF 함수 주의할 점, +1을 해줘야 하는 이유) (1) | 2024.09.13 |
MySQL 프로그래머스 | 조건에 맞는 개발자 (비트 연산자 활용) (1) | 2024.09.12 |
MySQL 프로그래머스 | 업그레이드 된 아이템 구하기 (부모 노드, 자식 노드) (3) | 2024.09.11 |
댓글