[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기_Oracle
2023. 4. 17. 14:49ㆍDataBase/SQL Query Problem
728x90
반응형
SMALL
정답을 도출하는 로직은 mysql과 크게 다를 것이 없다.
이 문제를 mysql로 푼 것은
https://tldnjs0821.tistory.com/201
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기_MySQL
레벨4 문제라 그런지 확실히 어려웠다. 내가 가장 애를 먹었던 부분은 11월에 대여가 가능한 차를 구하는 방법이었다. 처음엔 START_DATE와 END_DATE 사이에 11월이 없는 레코드를 뽑으려했다. 그런데 1
tldnjs0821.tistory.com
위 url에 있으니 참고하기를 바란다.
이 글에서는 mysql과 oracle의 차이를 말해보고자 한다.
우선 이 문제에서는 date타입을 표현하는 것에 차이가 있다.
mysql에서는 date타입도 string타입과 호환이 되는 듯하다.
하지만 oracle에서는 호환이 되지 않기 때문에 날짜를 비교하기 위해서 TO_DATE함수를 사용해야 한다.
또한 mysql은 모르겠는데 oracle 에서는 correlated subquery 라는 개념이 있는데
내부서브쿼리에서 외부쿼리의 테이블을 참조하는 쿼리를 말한다.
때문에 외부쿼리의 테이블과 내부서브쿼리의 테이블이 같다면 혹은 다루는 컬럼명이 같다면 alias를 통해 구분해주어야 에러가 발생하지 않는다.
정답
SELECT
C.CAR_ID, C.CAR_TYPE, ROUND((C.DAILY_FEE * 30 * (100 - D.DISCOUNT_RATE) * 0.01), 0) FEE
FROM
CAR_RENTAL_COMPANY_CAR C INNER JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN D
ON
C.CAR_TYPE = D.CAR_TYPE
WHERE
C.CAR_ID NOT IN (
SELECT C1.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C1 INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY R1
ON C1.CAR_ID = R1.CAR_ID
WHERE (C1.CAR_TYPE LIKE '세단' OR C1.CAR_TYPE LIKE 'SUV')
AND (R1.START_DATE <= TO_DATE('2022-11-30', 'YYYY-mm-dd') AND R1.END_DATE >= TO_DATE('2022-11-01', 'YYYY-mm-dd'))
GROUP BY C1.CAR_ID
) AND
D.DURATION_TYPE LIKE '30일 이상' AND
((C.DAILY_FEE * 30 * (100 - D.DISCOUNT_RATE) * 0.01) BETWEEN 500000 AND 2000000)
ORDER BY
FEE DESC, C.CAR_TYPE ASC, C.CAR_ID DESC;728x90
반응형
LIST
'DataBase > SQL Query Problem' 카테고리의 다른 글
| [프로그래머스] 자동차 대여 기록 별 대여 금액 구하기_Oracle (0) | 2023.04.18 |
|---|---|
| [프로그래머스] 있었는데요 없었습니다_Oracle, MySQL (0) | 2023.04.15 |
| [프로그래머스] 오랜 기간 보호한 동물(1)_MySQL (0) | 2023.04.14 |
| [프로그래머스] 오랜 기간 보호한 동물(2)_MySQL (0) | 2023.04.13 |
| [프로그래머스] 조건별로 분류하여 주문상태 출력하기_Oracle (0) | 2023.04.11 |