# 구하고자 하는 것
-- 세단, SUV인 자동차들 중에서
-- 2022/11/1 ~ 2022/11/30 까지 대여가 가능하고
-- 30일간의 대여 금액이 50만원 이상, 200만원 미만인 자동차
-- 대여 금액을 기준으로 내림차순 정렬, 자동차 종류 오름차순, 자동차 ID 내림차순
# 처음 생각한 것
대여기록테이블에서 세단, SUV자동차이면서 11월달에 예약이 안되어있는 차량들을 구했다.
하지만 이렇게되면 CAR_ID가 중복되는 차량이 많이 나오기 때문에 안됨!
아래처럼 해서 틀렸다.
세단, SUV조건도 없고, 아래처럼하면 동일한 데이터가 여러행이 나온다.

SELECT HISTORY.CAR_ID CAR_ID, CAR.CAR_TYPE CAR_TYPE, CAR.DAILY_FEE * 30 * (100 - PLAN.DISCOUNT_RATE) / 100 FEE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY HISTORY, CAR_RENTAL_COMPANY_CAR CAR, CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN
WHERE HISTORY.CAR_ID = CAR.CAR_ID(+)
AND CAR.CAR_TYPE = PLAN.CAR_TYPE(+)
AND PLAN.DURATION_TYPE = '30일 이상'
AND ((START_DATE <= TO_DATE('2022-11-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND END_DATE <= TO_DATE('2022-11-01 00:00:00','YYYY-MM-DD HH24:MI:SS')) OR
(START_DATE >= TO_DATE('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND END_DATE >= TO_DATE('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS')))
AND CAR.DAILY_FEE * 30 * (100 - PLAN.DISCOUNT_RATE) / 100 >= 500000
AND CAR.DAILY_FEE * 30 * (100 - PLAN.DISCOUNT_RATE) / 100 < 2000000
ORDER BY FEE DESC, CAR.CAR_TYPE, CAR.CAR_ID DESC;
# 정답
SELECT CAR.CAR_ID CAR_ID,
CAR.CAR_TYPE CAR_TYPE,
CAR.DAILY_FEE * 30 * (100 - PLAN.DISCOUNT_RATE) / 100 FEE
FROM CAR_RENTAL_COMPANY_CAR CAR, CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN
WHERE CAR.CAR_TYPE = PLAN.CAR_TYPE(+)
AND PLAN.DURATION_TYPE = '30일 이상'
AND CAR.CAR_TYPE IN ('세단', 'SUV')
AND CAR.CAR_ID NOT IN (
SELECT DISTINCT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE (START_DATE < TO_DATE('2022-11-30 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
AND END_DATE > TO_DATE('2022-11-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
)
AND (CAR.DAILY_FEE * (100 - PLAN.DISCOUNT_RATE) / 100) * 30 >= 500000
AND (CAR.DAILY_FEE * (100 - PLAN.DISCOUNT_RATE) / 100) * 30 < 2000000
ORDER BY FEE DESC, CAR.CAR_TYPE ASC, CAR.CAR_ID DESC;
CAR_ID를 구할 때 DISTINCT로 중복을 제거하고, 조건을 시작날짜가 11월 30일보다 작으면서 종료날짜가 11월 1일보다 큰 경우가 아닐때를 구한다. 내가 위에서 짰던 날짜코드는 예외가 너무 많이 존재했다. 중복데이터 생각하기!!
다음에 다시 또 풀어봐야될듯
'DB > ORACLE' 카테고리의 다른 글
[ORACLE/JOIN]5월 식품들의 총매출 조회하기 (0) | 2024.07.29 |
---|---|
오라클 설치 (0) | 2024.06.23 |
# 구하고자 하는 것
-- 세단, SUV인 자동차들 중에서
-- 2022/11/1 ~ 2022/11/30 까지 대여가 가능하고
-- 30일간의 대여 금액이 50만원 이상, 200만원 미만인 자동차
-- 대여 금액을 기준으로 내림차순 정렬, 자동차 종류 오름차순, 자동차 ID 내림차순
# 처음 생각한 것
대여기록테이블에서 세단, SUV자동차이면서 11월달에 예약이 안되어있는 차량들을 구했다.
하지만 이렇게되면 CAR_ID가 중복되는 차량이 많이 나오기 때문에 안됨!
아래처럼 해서 틀렸다.
세단, SUV조건도 없고, 아래처럼하면 동일한 데이터가 여러행이 나온다.

SELECT HISTORY.CAR_ID CAR_ID, CAR.CAR_TYPE CAR_TYPE, CAR.DAILY_FEE * 30 * (100 - PLAN.DISCOUNT_RATE) / 100 FEE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY HISTORY, CAR_RENTAL_COMPANY_CAR CAR, CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN
WHERE HISTORY.CAR_ID = CAR.CAR_ID(+)
AND CAR.CAR_TYPE = PLAN.CAR_TYPE(+)
AND PLAN.DURATION_TYPE = '30일 이상'
AND ((START_DATE <= TO_DATE('2022-11-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND END_DATE <= TO_DATE('2022-11-01 00:00:00','YYYY-MM-DD HH24:MI:SS')) OR
(START_DATE >= TO_DATE('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND END_DATE >= TO_DATE('2022-11-30 00:00:00','YYYY-MM-DD HH24:MI:SS')))
AND CAR.DAILY_FEE * 30 * (100 - PLAN.DISCOUNT_RATE) / 100 >= 500000
AND CAR.DAILY_FEE * 30 * (100 - PLAN.DISCOUNT_RATE) / 100 < 2000000
ORDER BY FEE DESC, CAR.CAR_TYPE, CAR.CAR_ID DESC;
# 정답
SELECT CAR.CAR_ID CAR_ID,
CAR.CAR_TYPE CAR_TYPE,
CAR.DAILY_FEE * 30 * (100 - PLAN.DISCOUNT_RATE) / 100 FEE
FROM CAR_RENTAL_COMPANY_CAR CAR, CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN
WHERE CAR.CAR_TYPE = PLAN.CAR_TYPE(+)
AND PLAN.DURATION_TYPE = '30일 이상'
AND CAR.CAR_TYPE IN ('세단', 'SUV')
AND CAR.CAR_ID NOT IN (
SELECT DISTINCT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE (START_DATE < TO_DATE('2022-11-30 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
AND END_DATE > TO_DATE('2022-11-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
)
AND (CAR.DAILY_FEE * (100 - PLAN.DISCOUNT_RATE) / 100) * 30 >= 500000
AND (CAR.DAILY_FEE * (100 - PLAN.DISCOUNT_RATE) / 100) * 30 < 2000000
ORDER BY FEE DESC, CAR.CAR_TYPE ASC, CAR.CAR_ID DESC;
CAR_ID를 구할 때 DISTINCT로 중복을 제거하고, 조건을 시작날짜가 11월 30일보다 작으면서 종료날짜가 11월 1일보다 큰 경우가 아닐때를 구한다. 내가 위에서 짰던 날짜코드는 예외가 너무 많이 존재했다. 중복데이터 생각하기!!
다음에 다시 또 풀어봐야될듯
'DB > ORACLE' 카테고리의 다른 글
[ORACLE/JOIN]5월 식품들의 총매출 조회하기 (0) | 2024.07.29 |
---|---|
오라클 설치 (0) | 2024.06.23 |