https://school.programmers.co.kr/learn/courses/30/lessons/157339
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 내용
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.
해결 방법
1. CAR_RENTAL_COMPANY_CAR(회사에서 대여 중인 자동차 테이블)를 기준으로 CAR_RENTAL_COMPANY_RENTAL_HISTORY (대여기록 테이블) 을 OUTER JOIN을 CAR_ID로 한다.
조건으로
+ 차 종류가(세단, SUV) 인 것
+ 반납일이 2022년 11월 1일보다 크거나 같고 대여일이 2022년 12월 1일보다 작을 때
-> 11월 1일부터 12월 1일 사이에 해당하지 않는 CAR 종류
이것이 테이블 D
2. 디스카운트 플랜과 D 테이블을 INNER JOIN 을 CAR_TYPE (세단, SUV)로 한다.
조건으로
+ 대여일 30일인 값 (like (%30%) 이 들어가 있는 경우
+ AND D.DAILY_FEE * (1 -(C.DISCOUNT_RATE * 0.01)) *30 >= 500000
+ AND D.DAILY_FEE * (1 -(C.DISCOUNT_RATE * 0.01)) *30 < 2000000
계산값이 50만 이상 200만 미만일 경우의 데이터
3. FEE 기준으로 내림차순, CAR_TYPE 오름차순, CAR_ID 는 내림차순으로 정렬하여 출력한다.
해결 쿼리문
-- 코드를 입력하세요
SELECT D.CAR_ID, D.CAR_TYPE, CAST(D.DAILY_FEE * (1 -(C.DISCOUNT_RATE * 0.01)) * 30 AS SIGNED) AS FEE
FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS C
INNER JOIN (SELECT DISTINCT B.CAR_ID, B.DAILY_FEE, B.CAR_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY AS A
RIGHT OUTER JOIN CAR_RENTAL_COMPANY_CAR AS B
ON A.CAR_ID = B.CAR_ID
WHERE (B.CAR_TYPE IN ('SUV','세단'))
AND (A.START_DATE IS NULL) OR B.CAR_ID NOT IN (select CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE END_DATE >= '2022-11-01'
AND START_DATE < '2022-12-01') ) AS D
ON C.CAR_TYPE = D.CAR_TYPE
WHERE C.DURATION_TYPE like ("%30%")
AND D.DAILY_FEE * (1 -(C.DISCOUNT_RATE * 0.01)) *30 >= 500000
AND D.DAILY_FEE * (1 -(C.DISCOUNT_RATE * 0.01)) *30 < 2000000
ORDER BY FEE DESC, CAR_TYPE ASC, CAR_ID DESC;
'프로그래머스 > lv4' 카테고리의 다른 글
[프로그래머스 lv4] 보호소에서 중성화한 동물 MYSQL (1) | 2024.11.29 |
---|---|
[프로그래머스 lv4] 언어별 개발자 분류하기 MYSQL (0) | 2024.11.27 |
[프로그래머스 lv4] FrontEnd 개발자 찾기 MYSQL (0) | 2024.11.26 |
[프로그래머스 lv4] 특정 세대의 대장균 찾기 (0) | 2024.11.25 |